查询性能 - 脑筋急转弯

时间:2016-01-22 13:34:34

标签: sql database sql-tuning

考虑一个表有2列,

  1. column_1具有60%的不同值,而column_2具有40%的不同值 值。
  2. 两者都有相同的数据类型,比如整数
  3. 如果必须在此表上应用索引,他应该选择哪个列进行索引?为什么?

1 个答案:

答案 0 :(得分:2)

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

现在,虽然更有效的值是索引更有效,因为您可以更快地丢弃行。如果大多数行相同,则索引将与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)

的composte索引

最后提示是您要在选择

上返回单个值
 SELECT fieldB FROM Table WHERE fieldA  = Value;

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