我有一个包含30k行和80多列的表。 从该表中选择100个项目,按列排序是一个非常缓慢的操作。仅为该特定列添加索引,它会大大改进查询。
我根据用户输入对这些查询进行了排序,他可以从中选择9个选项。
问题是:为所有这些列创建9个索引是否是最佳的,还是应该采取另一种方法?我知道用所有这些列创建一个索引不会改进任何东西。
答案 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
中的列 - 顺序相同且无间隙。
另请注意,每个索引都会为插入,更新和删除操作添加一些开销。但是,这听起来像查询数据是一个更大的问题,所以你可能不必担心这个开销。