--全表数据很多大概有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
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 t
ORDER 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库大小增长速度有关。
------解决方案--------------------