--全表数据很多大概有2千万条,--符合检索条件的数据58条--相关字段都有索引select top 100 * from tb with(nolock) where obid=10100 and id >456789 and dateTime < '2012-01-16 00:00:00'--下面的order by语句不加,秒出,加上,就铁定超时,--请问为什么?如何解决? order by id
[解决办法] ID字段有索引?还是聚集索引? [解决办法]
[解决办法] 试试?
SQL code
WITH t AS(select * from tb with(nolock) where obid=10100 and id >456789 and dateTime < '2012-01-16 00:00:00')SELECT TOP 100 *FROM tORDER BY id [解决办法]
[解决办法] SET SHOWPLAN_TEXT ON GO select top 100 * from tb --with(nolock) where obid=10100 and id >456789 and dateTime < '2012-01-16 00:00:00'
select top 100 * from tb --with(nolock) where obid=10100 and id >456789 and dateTime < '2012-01-16 00:00:00' --下面的order by语句不加,秒出,加上,就铁定超时, --请问为什么?如何解决? order by id
执行给结果。 [解决办法]
SQL code
因为你 加了 with(nolock) 查询出来的数据是 ID 的倒序(相当做了一次隐形的排序),如果不加是按照 ID 的正序 出的。这个是我最近才发现的。再加 ORDER BY ID 相当于再次排序 。故慢。还跟你的磁盘和tempdb库大小增长速度有关。 [解决办法]