在添加外键后,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分别对它们进行了索引。所以,现在我有了多个单独的索引字段。
我的问题是,我是否应该删除多个索引键?
发布于 2017-01-16 21:06:47
那得看情况。如果同一个学生属于许多公司,不,不要放弃。当查询company_id = 1 AND student_id = 3时,优化器必须选择一个索引,然后,它必须检查多个学生或多家公司。
不过,我的直觉告诉我,情况不会是这样的;学生不会与10多家公司有关联,所以稍微浏览一下指数不会有什么大不了的。也就是说,这比在两列上都有索引要脆弱得多。在这种情况下,优化器知道应该做什么,这里。当它有两个索引可供选择时,它可能不会,将来也可能不会,所以您应该使用FORCE INDEX来确保它使用student_id索引。
要考虑的另一件事是如何使用这个表。如果很少给它写信,但经常阅读,那么除了空间之外,额外索引也不会有太多的损失。
TL;DR:索引不是多余的。你是否应该保留它是很复杂的。
https://stackoverflow.com/questions/41684376
复制相似问题