如果索引字段也是外键,我应该使用多索引方法吗?

时间:2017-01-16 20:20:21

标签: mysql database-indexes

添加外键后,mysql强制索引之前使用多索引方法索引的键。我使用InnoDB。

这是我桌子的结构:

idcompany_idstudent_id ...

company_idstudent_id已编入索引:

ALTER TABLE `table` ADD INDEX `multiple_index` (`company_id`,`student_id`)

为什么我使用多个索引列?因为,我的查询的时间最多:

SELECT * FROM `table` WHERE company_id = 1 AND student_id = 3

有时我只是通过student_id获取列:

SELECT * FROM `table` WHERE student_id = 3

company_idstudent_id添加外键后,mysql分别为它们编制索引。所以,现在我有多个单独索引的字段。

我的问题是我应该删除多个索引键吗?

1 个答案:

答案 0 :(得分:1)

这取决于。如果同一个学生属于许多公司,不,不要放弃它。查询company_id = 1 AND student_id = 3时,优化器必须选择一个索引,之后,它将要检查多个学生或多个公司。

我的直觉告诉我,但事实并非如此;学生们不会与超过10家公司建立联系,所以扫描一下这个指数并不是什么大不了的事。也就是说,这比在两列上都有索引要脆弱得多。在这种情况下,优化器知道正确的操作是什么,这里。当它有两个可供选择的索引时,它可能不会,也可能不会在将来,所以你应FORCE INDEX确保它使用student_id索引。

要考虑的另一件事是如何使用此表。如果它很少被写入但经常阅读,那么对于额外的索引而言,除了空间之外没有太多的惩罚。

TL; DR:索引不是多余的。你是否应该保留它是很复杂的。