Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

207

积分

1

好友

4

主题
1#
发表于 2012-2-27 14:56:41 | 查看: 4135| 回复: 1
原语句:
  1. select tt.*,rownum from
  2. --1.开头为关键字a的3条记录
  3. (select t.name, sum(t.time) c from tab1 t
  4. where t.type = '0' and (t.name like 'a%' or t.name1 like 'a%' or t.name2 like 'a%')
  5. group by t.name order by c desc) tt
  6. where rownum < 5  
  7.       union all
  8. --2.中间包含关键字a的3条记录
  9. select tt.*,rownum  from
  10. (select t.name, sum(t.time) c from tab1 t
  11. where t.type = '0' and (t.name like '%a%' or t.name1 like '%a%' or t.name2 like '%a%')
  12. group by t.name order by c desc) tt
  13. where rownum < 4
  14. --3.结尾为关键字a结尾的3条记录
  15.      union all
  16. select tt.*,rownum from
  17. (select t.name, sum(t.time) c from tab1 t
  18. where t.type = '0' and (t.name like '%a' or t.name1 like '%a' or t.name2 like '%a')
  19. group by t.name order by c desc) tt
  20. where rownum < 4;
复制代码


我提出的2个建议是:
1、使用中间表来保存需要处理的记录,然后后续处理(我这里使用with tt as子查询来处理)
2、第2个子查询有问题,改成正则表达式可以简单的实现,因此建议第1、3个子查询也用正则表达式
除此之外各位还有没啥建议?
爱老婆,爱FM,爱音乐;挨踢,爱折腾,爱Oracle
2#
发表于 2012-2-27 15:16:40
1. 对于这种查询 考虑使用全文索引,参考http://www.orafaq.com/node/1918


2.  适合 查询1的执行计划 未必 适合 查询 2、3,所以若用中间表 需注意适用范围。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-15 02:02 , Processed in 0.053534 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569