Order By操作的SQL Server索引

时间:2018-06-12 08:02:38

标签: sql sql-server indexing sql-order-by

我有一个包含30k行和80多列的表。 从该表中选择100个项目,按列排序是一个非常缓慢的操作。仅为该特定列添加索引,它会大大改进查询。

我根据用户输入对这些查询进行了排序,他可以从中选择9个选项。

问题是:为所有这些列创建9个索引是否是最佳的,还是应该采取另一种方法?我知道用所有这些列创建一个索引不会改进任何东西。

1 个答案:

答案 0 :(得分:0)

如果您的查询格式为:

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

然后col上的索引会有所帮助。 SQL Server将使用索引找到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中的列 - 顺序相同且无间隙。

另请注意,每个索引都会为插入,更新和删除操作添加一些开销。但是,这听起来像查询数据是一个更大的问题,所以你可能不必担心这个开销。