SQL Order By 操作的服务器索引

SQL Server indexes for Order By operations

我有一个 table 有 30k 行和超过 80 列。 从这个 table 中选择 100 个项目,按列排序是一个相当慢的操作。仅为该特定列添加索引,它大大改进了查询。

我将这些查询按用户输入排序,他可以从中选择 9 个选项。

问题是:为所有这些列创建 9 个索引是否最佳,还是我应该采用其他方法?我知道用所有这些列创建一个索引不会有任何改善。

如果您的查询是以下形式:

select top (100) t.*
from t
order by col;

col 上的索引将会有所帮助。 SQL 服务器将使用索引找到 100 行,然后取回其余的列。

如果您有 9 个这样的列,那么每个列的单独索引将加快查询速度。

如果您可以开始组合列,则索引只会帮助选择单列。所以考虑这五个子句:

order by col1
order by col1, col2
order by col1, col2, col3
order by col1, col3
order by col1, col3, col2

要完全覆盖这些 order by,您需要两个索引 -- (col1, col2, col3)(col1, col3, col2)。索引中的前导列必须完全匹配 order by 中的列——顺序相同且没有间隙。

另请注意,每个索引确实会增加一些插入、更新和删除操作的开销。但是,听起来查询数据是一个更大的问题,因此您可能不必担心该开销。