【发布时间】:2011-05-19 14:17:08
【问题描述】:
我在数据库中有一张大表(数百万条记录,大小约为 500GB)。
在这张表中,我有很多列,其中有一个名为FinishTime 的日期字段。
该字段上有一个索引。
现在问题来了:
当我使用条件 FinishTime >= <now - 10 hours> 运行一个简单的选择查询时 - 查询需要很长时间才能完成。
当我使用条件FinishTime >= <now - 11 hours> 运行一个简单的选择查询时 - 查询立即完成。
奇怪的是,第二个查询的输出应该包含第一个查询的所有输出,甚至更多。
更多信息:我正在使用 MS JDBC 驱动程序通过 JAVA 应用程序运行这些查询。我正在使用 PreparedStatement。
运行这两个查询的代码是相同的。
有什么想法吗?
谢谢
编辑:更多信息和更正: 我还有一个相关字段 - JobId,整数,它也有一个索引。 问题似乎发生在这些查询上(由于 PAGEIOLATCH_SH,我在管理工作室看到卡住的查询):
卡住的查询:
select * from jobsData (with readuncommitted) where ([FinishTime >= {ts '2011-05-19 09:23:00'}) AND ([JobId]=5)
立即完成的查询:
select * from jobsData (with readuncommitted) where ([FinishTime >= {ts '2011-05-19 04:23:00'}) AND ([JobId]=5)
【问题讨论】:
-
在 SQL Server Mgmt Studio 中运行这两个查询时会发生同样的事情吗??
-
您的统计数据是最新的吗?
-
请包括完整的查询和相关表的架构。
-
不,奇怪的是,当在 Mgmt Studion 上运行时,两个查询都会立即结束。是的,我的统计信息已更新,并且我已包含查询。
-
请发布每个查询的执行计划以及表架构。
标签: sql-server-2008