SQL索引-我是否正确使用了它们?
我有一个数据库,其中包含许多不同的表,这些表记录了我的用户的数据。用户在php后端通过其唯一的用户ID进行标识,这用于标识各种记录的所有者。例如,在一个名为“预算”的表格中,我有: 预算TID |所有者|预算|名称|等|等 每当用户创建一个新预算时,就会在budgetid上为该条目分配一个唯一的主条目,并且在owner下会插入其用户IDSQL索引-我是否正确使用了它们?,sql,Sql,我有一个数据库,其中包含许多不同的表,这些表记录了我的用户的数据。用户在php后端通过其唯一的用户ID进行标识,这用于标识各种记录的所有者。例如,在一个名为“预算”的表格中,我有: 预算TID |所有者|预算|名称|等|等 每当用户创建一个新预算时,就会在budgetid上为该条目分配一个唯一的主条目,并且在owner下会插入其用户ID 鉴于在“所有者”列上进行了大量数据搜索,请选择“位置”,这可能是一个合理的列,可以在该列上指定非唯一索引?看来您走的是一条很好的道路。您描述的是外键 我认为你有
鉴于在“所有者”列上进行了大量数据搜索,请选择“位置”,这可能是一个合理的列,可以在该列上指定非唯一索引?看来您走的是一条很好的道路。您描述的是外键 我认为你有大局。一些小事情可能会有帮助 最好的做法是让外键列名符合以_id结尾的标准,并在可能的情况下使用tablename。在这种情况下,我建议您将“所有者”重命名为“用户id”。它更清楚地表明它包含来自另一个表的id,以及它是哪个表 您应该在迁移中定义外键。让数据库意识到这一点将有助于增强数据的完整性
$table->foreign('user_id')->references('id')->on('users');
根据您的数据库,您可能可以添加索引,通过添加
$table->index('email');
尽管在您为您的特定数据库解决方案执行此操作之前进行一些研究会很好。例如,Mysql会在添加外键约束时自动添加索引
如果在所有者列上进行了大量数据搜索,那么选择WHERE,这可能是一个合理的列,可以在该列上指定非唯一索引
对。如果WHERE子句中通常使用列,则该列是索引的良好候选列:
create index idx_budgets_owner on budget(owner);
我倾向于在索引中添加另一列,以处理更具体的排序标准。也许:
create index idx_budgets_owner_createdat on budget(owner, createdat);
当然,您还应该将owner声明为users表的外键。在MySQL中,外键声明还创建索引。但是,对于大多数数据库,您需要一个单独的index语句。如果您需要关于如何优化一个或多个查询的建议,那么您应该向我们确切地说明这些查询是什么。