Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按操作排序的SQL Server索引_Sql_Sql Server_Indexing_Sql Order By - Fatal编程技术网

按操作排序的SQL Server索引

按操作排序的SQL Server索引,sql,sql-server,indexing,sql-order-by,Sql,Sql Server,Indexing,Sql Order By,我有一个有30k行和80多列的表。 从这个表中选择100个按列排序的项目是一个相当慢的操作。仅为该特定列添加索引,可以大大改进查询 我已经按照用户输入对这些查询进行了排序,他可以从中选择9个选项 问题是:为所有这些列创建9个索引是最佳选择,还是我应该采取另一种方法?我知道,创建一个包含所有这些列的索引不会有任何改进。如果您的查询的形式为: select top (100) t.* from t order by col; 然后,col上的索引将有所帮助。SQLServer将使用索引查找100行

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

我已经按照用户输入对这些查询进行了排序,他可以从中选择9个选项


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

如果您的查询的形式为:

select top (100) t.*
from t
order by col;
然后,
col
上的索引将有所帮助。SQLServer将使用索引查找100行,然后返回其余的列

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

如果可以开始组合列,则索引仅对单列选择有帮助。因此,考虑这五个条款:

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


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

是的,创建九个单独的索引将加快所有查询的速度-但代价是:其他操作,如
INSERT
UPDATE
将更慢(因为每个操作现在都必须更新所有这些索引)。所以问题是:查询速度有多重要?这九种排序方式被使用的可能性有多大?如果您可以将自己限制为2、3个更频繁的排序选项,那么这可能是一个很好的折衷方案,既可以快速执行最频繁的查询,又可以不给更新/插入带来太多负担。请粘贴您的查询执行计划查询速度对应用程序来说非常重要。数据来自导入webjob,因此我认为
INSERT
UPDATE
没有那么重要。索引可能有效,也可能无效。如何选择100个项目?