Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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 2008 在SQL Server 2008上重建索引后没有实际的性能提升_Sql Server 2008_Indexing_Clustered Index - Fatal编程技术网

Sql server 2008 在SQL Server 2008上重建索引后没有实际的性能提升

Sql server 2008 在SQL Server 2008上重建索引后没有实际的性能提升,sql-server-2008,indexing,clustered-index,Sql Server 2008,Indexing,Clustered Index,我有一个表,它的复合聚集索引(int,DateTime)是99%分段的 在进行碎片整理并确保更新了统计信息后,我在运行此查询时仍然得到相同的响应时间: SELECT * FROM myTable WHERE myIntField = 1000 AND myDateTimeField >= '2012-01-01' and myDateTimeField <= '2012-12-31 23:59:59.999' 选择* 从myTable 其中myIntField=1000 而my

我有一个表,它的复合聚集索引(
int,DateTime
)是99%分段的

在进行碎片整理并确保更新了统计信息后,我在运行此查询时仍然得到相同的响应时间:

SELECT *
FROM myTable
WHERE myIntField = 1000 
AND myDateTimeField >= '2012-01-01' 
and myDateTimeField <= '2012-12-31 23:59:59.999'
选择*
从myTable
其中myIntField=1000
而myDateTimeField>='2012-01-01'

和myDateTimeField您应该避免
选择*
——即使您确实需要表中的所有列(这很少见)

而且,你在这里做的事情非常危险。您是否知道您的最终范围已到,因此您可能会在午夜时包含2013-01-01的数据?尝试:

AND myDateTimeColumn >= '20120101' 
AND myDateTimeColumn <  '20130101'
和myDateTimeColumn>='20120101'
和myDateTimeColumn<'20130101'
(这不会改变性能,但无论基础数据类型是什么,它都更容易生成并保证准确。)

为了从查询时间的分析中消除网络延迟,您可以考虑——允许您通过向服务器运行查询来生成实际计划,但是放弃结果,因此这不是干扰因素。


免责声明:我为SQL Sentry工作。

查询的执行时间将花费在读取足够多的索引btree页面以生成结果上。对索引进行碎片整理将把相邻的行放在一起,从而减少需要读取的页数。它还可以从将很大程度上随机的io模式转换为连续的io模式中获益

如果您的行很宽,并且每页的行数不多,那么您将不会看到行数的减少

如果索引填充因子较低,则每页的行数就不会那么多

如果您的页面在缓存中,您将看不到任何streaming v random IO的好处


如果计算机上有空闲的CPU容量,则使用页面压缩可能会使您受益。这实质上是用更多的CPU换取更少的IO。

表中有多少行,而与此查询匹配的行有多少行?这张桌子有多宽?需要多长时间?你在哪里测量这个(ManagementStudio,你的应用程序)以及你检索结果离数据源有多远?你看过统计数据了吗?这个场景可能完全在记忆中,有助于解释你在这里看到的东西。到底是什么问题?返回多少行?查询需要多长时间?当您进行查询时,请将日期字符串文本更改为“安全”ISO-8601格式-
YYYYMMDD
,不带任何破折号或斜杠或任何东西@Aaron Bertrand我放的代码只是一个示例,请不要介意select的编写方式,它不会影响我正在寻找的性能。