免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1416 | 回复: 1
打印 上一主题 下一主题

请问这个sql语句还有没有更优化的写法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-11 15:04 |只看该作者 |倒序浏览
要取出表中某个字段的前n个最大的值,
设表名tab1,字段为f1
用 select * from tab1 where rownum<n order by f1 desc;
不行,因为这样取出来的是前n个物理记录,再在这n个值中进行排序。

用 select * from (select * from tab1 order by t1 desc) where rownum<n;
可以。

或者,建一个视图,create vtab1 as select * from tab1 order by t1 desc; 然后 select * from vtab1 where rownum<n;
也可以,就是感觉不够优化,表大了以后,特慢,不知各位大侠有没有更好的办法,请不吝赐教。

论坛徽章:
0
2 [报告]
发表于 2005-03-11 15:24 |只看该作者

请问这个sql语句还有没有更优化的写法

the 2nd SQL involves an inline view. it's basically the same as the 3rd SQL

You can try to build an index on the t1 column to spped up the SQL. Note the closer of ratio of the number of distinct t1 and the total number of t1 to 1, the better
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP