Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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_Sql Server 2008_Indexing_Sql Execution Plan_Force Index - Fatal编程技术网

Sql server 为什么索引扫描用于不同的日期?在某个日期,它将使用索引查找

Sql server 为什么索引扫描用于不同的日期?在某个日期,它将使用索引查找,sql-server,sql-server-2008,indexing,sql-execution-plan,force-index,Sql Server,Sql Server 2008,Indexing,Sql Execution Plan,Force Index,表大小约为40GB,约有9800万行 我有一个简单的查询,从表中选择1天数据的最小/最大id。通过输入不同的日期,查询计划将更改为索引扫描,而不是运行了很长时间的索引查找。一天的行数相当标准,大约2-3万行。该表有一个testtimestamp列的索引,但不知何故,对于某些日期,SQLServer不使用该索引。对于这种情况,如果我使用索引提示,它将在几秒钟内返回 此图显示更改日期后使用索引扫描的SQL Server 使用索引提示时,它将使用正确的索引。问题是为什么更改日期会有不同的计划 有

表大小约为40GB,约有9800万行

我有一个简单的查询,从表中选择1天数据的最小/最大id。通过输入不同的日期,查询计划将更改为索引扫描,而不是运行了很长时间的索引查找。一天的行数相当标准,大约2-3万行。该表有一个
testtimestamp
列的索引,但不知何故,对于某些日期,SQLServer不使用该索引。对于这种情况,如果我使用索引提示,它将在几秒钟内返回

此图显示更改日期后使用索引扫描的SQL Server

使用索引提示时,它将使用正确的索引。问题是为什么更改日期会有不同的计划


有人有什么想法吗?

很可能由于不同的日期值而产生不同的行数估计,从而导致不同的计划。验证统计数据是否最新,并上传实际执行计划。感谢您的反馈。实际上,我注意到当索引扫描发生时,行数较少(大约3000行),查询中唯一不同的是日期范围。对于带有索引Seek的日期范围,它是30000行。这让我头疼。这是索引扫描的计划