日期:2014-05-18 浏览次数:20673 次
SELECT TOP 10 * FROM tgongwen WHERE gid > (SELECT MAX(gid) FROM (SELECT TOP 20 gid FROM tgongwen) AS T)
SELECT TOP 10
* --如果是gid的话,走索引了,就会快的
FROM tgongwen
WHERE gid > ( SELECT MAX(gid) --如果直接给出一个值的话,也会走索引,Ctrl+L 看一下执行计划便知
FROM ( SELECT TOP 20 --没有排序的话这个top 20 是哪20个呢?
gid
FROM tgongwen
) AS T
)
------解决方案--------------------
但执行SELECT MAX(gid) FROM (SELECT TOP 20 gid FROM tgongwen) AS T这一句时返回的不是20,却是整个表中gid的最大值,所以导致最终返回的是空结果集。但为什么会这样呢? --是因为GID上的索引造成的。SQLSERVER直接对表执行了索引查找而非你产生的临时结果集查找。如果去掉索引就没有问题了。
------解决方案--------------------
set showplan_all on go SELECT MAX(gid) FROM (SELECT TOP 20 gid FROM tgongwen) AS T 看看你的执行计划你就会理解了
------解决方案--------------------
先解决你的问题
SELECT TOP 10 * FROM tgongwen WHERE gid > (SELECT MAX(gid) FROM (SELECT TOP 20 gid FROM tgongwen order by gid asc) AS T
--这样可以得到你想要的结果。