SQL2005
表SIS_PaValue,大概3千万数据,Id为聚集索引,Recorddate为索引(datetime类型)查询SQL语句为
SELECT TOP 20 Id, NoteCode, [Value], RecordDate, Status
FROM SIS_PaValue
WHERE (RecordDate >= '2010-07-01')
ORDER BY Id DESC查询时间为16秒左右
如果把Order By Id Desc去掉,则时间为20毫秒为什么2者差别这么大,Id已经是聚集索引,为什么order by还这么耗时?另:或者把where条件去掉,留下order by,时间为15毫秒
表SIS_PaValue,大概3千万数据,Id为聚集索引,Recorddate为索引(datetime类型)查询SQL语句为
SELECT TOP 20 Id, NoteCode, [Value], RecordDate, Status
FROM SIS_PaValue
WHERE (RecordDate >= '2010-07-01')
ORDER BY Id DESC查询时间为16秒左右
如果把Order By Id Desc去掉,则时间为20毫秒为什么2者差别这么大,Id已经是聚集索引,为什么order by还这么耗时?另:或者把where条件去掉,留下order by,时间为15毫秒
SELECT Id, NoteCode, [Value], RecordDate, Status
FROM SIS_PaValue
WHERE (RecordDate >= '2010-07-01')
ORDER BY Id DESC
FROM SIS_PaValue
WHERE (RecordDate >= '2010-07-01')
ORDER BY Id DESC如果不带ORDER BY,则是符合WHERE条件的任意20条记录,即通过索引查找任意20条记录即可。
如果带ORDER BY,则是所有符合WHERE条件的记录中,按Id逆序的前20条,即通过索引查找到所有记录,再按聚集索引顺序输出。
我用这方法去查,不知道为什么很慢,1分多钟后还不出结果,我取消了查询
去掉order by后 结果瞬间就出来了
按聚集索引排序不是应该很快的吗?这为什么会慢..
如果没有where条件,order by id 查询一下子就出来了;
或者是保留where条件,去掉order by 查询野一下子就出来了弄得我头都大了..
之后再排序,所以慢。如果没有where条件,order by id 查询一下子就出来了;
此时使用ID 的 clustered index 所以快,因为他已经是排序的了。或者是保留where条件,去掉order by 查询野一下子就出来了
不用order by 只从where 条件中取出20条就返回结果,所以快。
可以使用这种方式的话就可以提速,如果不能,要你的index包含你要查询的所有的字段,会快多少不知道。