日期:2014-05-18  浏览次数:20372 次

奇怪的问题:关于排序
表test
id(主键 自增长 int)
索引是id这个字段

select * from test 时排序如下
246684
246709
246711
246512

我觉得应该是
246512
246684
246709
246711
非写成select * from test order by id才正确



------解决方案--------------------
SQL SERVER 数据库中它是按照集合查询的。也就是说:在集合中,顺序是无序的。它会随即出现。
而order by 是对这个的一个排序,是按顺序列出,但在性能上的消耗是比较大的。
------解决方案--------------------
order by 列中的索引(非聚集)不包含你select列表的列的话,是不会使用索引的
你可以看下执行计划

也就是说,如果有表tb 列:id,val,dt有聚集索引id,非聚集索引val

那select * from tb order by val
是不会直接使用非聚集索引的,而要使用一个sort的操作符来排序。

如果select id,val FROM tb 则可以直接在非聚集索引val的顺序来显示。
------解决方案--------------------
探讨

order by 列中的索引(非聚集)不包含你select列表的列的话,是不会使用索引的
你可以看下执行计划

也就是说,如果有表tb 列:id,val,dt有聚集索引id,非聚集索引val

那select * from tb order by val
是不会直接使用非聚集索引的,而要使用一个sort的操作符来排序。

如果select id,val FROM tb 则可以直接……