添加外键后,mysql强制索引之前使用多索引方法索引的键。我使用InnoDB。
这是我桌子的结构:
id
,company_id
,student_id
...
company_id
和student_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_id
和student_id
添加外键后,mysql分别为它们编制索引。所以,现在我有多个单独索引的字段。
我的问题是我应该删除多个索引键吗?
答案 0 :(得分:1)
这取决于。如果同一个学生属于许多公司,不,不要放弃它。查询company_id = 1 AND student_id = 3
时,优化器必须选择一个索引,之后,它将要检查多个学生或多个公司。
我的直觉告诉我,但事实并非如此;学生们不会与超过10家公司建立联系,所以扫描一下这个指数并不是什么大不了的事。也就是说,这比在两列上都有索引要脆弱得多。在这种情况下,优化器知道正确的操作是什么,这里。当它有两个可供选择的索引时,它可能不会,也可能不会在将来,所以你应FORCE INDEX
确保它使用student_id索引。
要考虑的另一件事是如何使用此表。如果它很少被写入但经常阅读,那么对于额外的索引而言,除了空间之外没有太多的惩罚。
TL; DR:索引不是多余的。你是否应该保留它是很复杂的。