自从我使用 MySQL 多年以来,我有点不好意思问这个问题,但是哦。
我有一个包含两个字段的表,a
和 b
。我将对其运行以下查询:
SELECT * FROM ... WHERE A = 1;
SELECT * FROM ... WHERE B = 1;
SELECT * FROM ... WHERE A = 1 AND B = 1;
从性能的角度来看,以下索引配置中的至少一种是否对至少一个查询较慢?如果是,请详细说明。
ALTER TABLE ... 添加索引 (a); ALTER TABLE ...添加索引(b);
ALTER TABLE ... ADD INDEX (a, b);
ALTER TABLE ... 添加索引 (a); ALTER TABLE ...添加索引(b); ALTER TABLE ...添加索引(a,b);
谢谢(注意我们说的是非唯一索引)
最佳答案
是的,至少有一种情况要慢得多。如果只定义以下索引:
ALTER TABLE ... ADD INDEX (a, b);
... 那么查询 SELECT * FROM ... WHERE B = 1;
将不会使用该索引。
当您使用复合键创建索引时,键的列顺序很重要。建议尝试对 key 中的列进行排序以增强选择性,将最具选择性的列放在 key 的最左侧。如果您不这样做,并将非选择性列作为键的第一部分,则可能根本不使用索引。 (来源:Tips on Optimizing SQL Server Composite Index)
关于sql - 多个和单个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155656/