查询性能 - 脑筋急转弯

Query performance - Brain teaser

考虑 table 有 2 列,

  1. column_1 有 60% 的不同值,column_2 有 40% 的不同值 值。
  2. 两者具有相同的数据类型,例如整数

如果要在这个table上应用索引,他应该选择索引哪一列?为什么?

创建索引最重要的考虑因素是,如果您对该字段执行搜索,那么数据类型是无关紧要的。

现在,虽然更多不同的值更有效,但索引是因为您可以更快地丢弃行。如果大多数行相同,则索引将与 FULL SCAN

相同

因此,如果您有类似

的查询
 SELECT * FROM Table WHERE fieldA  = Value;

 SELECT * FROM Table WHERE fieldB  = Value;

你想要两个索引,每个字段一个

但是如果你有这样的问题

 SELECT * FROM Table WHERE fieldA  = Value
                       AND fieldB  = Value;

您想要包含两个字段 (fieldA, fieldB) 的复合索引

最后一个提示是,如果您希望 return 在您的 select

上使用单个值
 SELECT fieldB FROM Table WHERE fieldA  = Value;

您还需要一个复合索引,因为您将在索引中搜索 Value 而不必在 table 上进行查找以获得 fieldB 的值,因为 已经在索引中.