Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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 查询微调_Sql_Sql Server 2008 - Fatal编程技术网

Sql 查询微调

Sql 查询微调,sql,sql-server-2008,Sql,Sql Server 2008,我有一个简单的查询,从数据库中检索数据大约需要7-8秒,我想进一步微调到2-3秒 表: UpdateDateTime | field1 | field2 |..... FieldN. 查询是: Select * from Table with (nolock) where UpdateDateTime Between D1 and D2 Order By UpdateDateTIme 我已在UpdateDateTime 如何进一步提高其效率?减少返回的列数是显而易见的答案,然

我有一个简单的查询,从数据库中检索数据大约需要7-8秒,我想进一步微调到2-3秒

表:

UpdateDateTime | field1 | field2 |..... FieldN.
查询是:

Select *  
from Table with (nolock)  
where UpdateDateTime Between D1 and D2  
Order By UpdateDateTIme  
我已在
UpdateDateTime


如何进一步提高其效率?

减少返回的列数是显而易见的答案,然后在
UpdateDateTIme
上创建一个覆盖(非聚集)索引,并
包含其他选定列

CREATE NONCLUSTERED INDEX NC_MyCoveringIndex 
   ON Table(UpdateDateTime)
      INCLUDE (Col1, Col2, ..., ColN)

[注意:创建包含表中所有列的广泛覆盖索引并不理想。]

很大程度上取决于
WHERE
子句的选择性。如果它返回的行数(大约)大于表中行数的10%,那么优化程序可能只是扫描聚集索引


差不多就是这样。除此之外,您还需要查看您的硬件,以及您正在传输的数据量。

但我需要所有字段。你能告诉我如何创建覆盖索引吗?是:在Include()上创建索引你不应该在所有列上创建覆盖索引。不理想。是的,这就是语法。它取决于很多很多事情。你的服务器设备好吗?您正在通过internet运行查询吗?