Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 Server_Performance_Sql Server 2008_Indexing - Fatal编程技术网

Sql server 为此查询在我的表上添加索引

Sql server 为此查询在我的表上添加索引,sql-server,performance,sql-server-2008,indexing,Sql Server,Performance,Sql Server 2008,Indexing,我有一个500万行的表,其中一个特定的查询最多。所以我想添加一个索引来加快速度 查询: SELECT someID FROM someTable WHERE myVarChar = @myVarChar AND MyBit = 0 AND MyBit2 = 1 AND MyBit3 = 0 注意,myVarChar列是唯一的 对于这种类型的查询,最好的索引是什么?我目前有一个索引,涵盖了上述查询中的所有4列。此外,我是否需要

我有一个500万行的表,其中一个特定的查询最多。所以我想添加一个索引来加快速度

查询:

SELECT someID 
FROM   someTable 
WHERE 
       myVarChar = @myVarChar AND
       MyBit = 0 AND 
       MyBit2 = 1 AND 
       MyBit3 = 0
注意,
myVarChar
列是唯一的

对于这种类型的查询,最好的索引是什么?我目前有一个索引,涵盖了上述查询中的所有4列。此外,我是否需要每隔一段时间重新编制一次索引,还是自动重新编制索引


我使用的是sql server 2008标准。

如果您有一个包含四列的索引,这可能是它将获得的最好结果。您应该定期重新编制索引并更新统计数据,但至少每周一次。

someID是该表的主键吗?如果没有,您应该将其添加到索引中,以防止书签查找


另外,请查看该查询的执行计划,如果索引构造正确,您应该会在执行计划视图中看到两个图标:选择和索引搜索。

这可能是查询的最佳索引,但创建后,请检查执行计划以确保其被使用。如果在查询分析器中运行原始SQL时,以及在将其作为存储过程运行时,得到两种不同的执行计划,请阅读


检查您的执行计划,以确保您得到的索引查找没有键查找。如果确实看到键查找,则可能需要更改或向索引或include()部分添加列。此外,如果您要进行任何排序,尤其是
desc
,请确保将其添加到索引中。

首先,您需要使用这种查询来获取列的部分,观察所获得的值,并按区分对列进行排序

SELECT myVarChar ,count(*)
FROM someTable 
GROUP BY myVarChar 
ORDER BY 2 desc
其次,您可以在该对话框中使用“创建索引”:

CREATE UNIQUE INDEX IX_MyIndex 
ON SomeTable (myVarChar, MyBit, MyBit2, MyBit3) 
INCLUDE (SomeID)

codemonkey说的是对的,一定要避免为布尔类值构建非聚集索引。但是您可以尝试使用(其他种类的值+布尔值)构建索引。

如果我在QA中运行select两次,它会缓存它吗?我记得每次运行查询时都有一个命令来确保它是“新鲜的”?您可以使用重新编译提示,但我建议您不要使用。这可能会有一点回报,但随着表的增长,您希望利用新的统计信息并让查询优化器选择最佳路径——这通常做得很好。尽管频率取决于表数据修改的频率。
CREATE UNIQUE INDEX IX_MyIndex 
ON SomeTable (myVarChar, MyBit, MyBit2, MyBit3) 
INCLUDE (SomeID)