[已解决问题] 数据库题目求解
提问时间: 2008-04-12 15:26
浏览:178 次
表名为Tab_1,其中有一个字段为code,写一条select按code从小到大排序的前十条记录,并按code从大到小排序。
最佳答案
很好的一个问题.用下面这条语句就可以满足你的需求了.
select * from [Tab_1] where code in (select top 10 code from [Tab_1] order by code asc) order by code desc
2008/4/12 17:59:10 回答者:侯垒


提问者对于答案的评价:谢谢 很适用的一个答案 同时也谢谢其他人的答案
其它回答(3)
怎么可能既按code"从小到大排序",又"从大到小排序"呢?
1个月前   回答者:deerchao - 老鸟四级
呵呵,这个需求其实很经常遇到的
侯垒是对的,建议在code上做个索引,会快很多
1个月前   回答者:丁学 - 老鸟四级
其实可以考虑先取出前10条记录,然后再在内存中按code从大到小排序,这样在数据量很大时,可以提高速度。。 个人见解 
1个月前   回答者:张荣华 - 小虾三级
评论
1个月前   deerchao :
呵呵,一时间没理解楼主的要求 :(

张荣华:
侯垒的做法在数据库里基本上可以肯定就是这么执行的.
1个月前   丁学 :
to deerchao:
其实我倒是有一些怀疑,如果单是排序的话,那就没问题了,问题在于第一次scan/seek只取出了code,第二次却要取出所有的值,不知道那个in会怎么去执行
1个月前   丁学 :
测试了一下,侯垒的语句和张荣华的建议还是有差别的(SQL SERVER 2005):
CODE无索引时开销比:54% vs 46%,最大开销都在Top N Sort上,但侯垒的语句多了三个操作:聚集索引扫描,排序,哈希匹配
CODE有索引时开销比:55% vs 45%,侯垒的语句最大开销转移到了Index Scan上,张荣华的建议最大开销也转到了键查找上,所以,索引还是很有效的,执行计划比无索引时变得复杂了很多,尤其侯垒那个语句
最终建议:如果是频繁使用建议听取张荣华的建议,并在code上做索引,这样可以避开聚集索引扫描,性能提升非常明显
4周前   mafa :
看了讨论,我想问下楼主,如果code有相同的情况,你要取出几条?
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除