小编典典

多个和单个索引

sql

自从我使用MySQL多年以来,我对此感到很ham愧,但是,哦。

我有一个包含两个字段的表格,ab。我将在其上运行以下查询:

  • SELECT * FROM ... WHERE A = 1;
  • SELECT * FROM ... WHERE B = 1;
  • SELECT * FROM ... WHERE A = 1 AND B = 1;

从性能的角度来看, 对于至少一个查询,以下索引配置中的至少一种 是否 较慢 ?如果是,请详细说明。

  1. ALTER TABLE ... ADD INDEX (a); ALTER TABLE ... ADD INDEX (b);
  2. ALTER TABLE ... ADD INDEX (a, b);
  3. ALTER TABLE ... ADD INDEX (a); ALTER TABLE ... ADD INDEX (b); ALTER TABLE ... ADD INDEX (a, b);

谢谢(请注意,我们正在谈论非唯一索引)


阅读 235

收藏
2021-04-15

共1个答案

小编典典

是的,至少一种情况要慢得多。如果仅定义以下索引:

ALTER TABLE ... ADD INDEX (a, b);

…那么查询SELECT * FROM ... WHERE B = 1;将不使用该索引。

使用复合键创建索引时,键的列顺序很重要。建议尝试对键中的列进行排序,以增强选择性,将选择性最高的列放在键的最左侧。如果您不这样做,而将非选择列作为键的第一部分,则可能会根本不使用索引。

2021-04-15