查看: 2897|回复: 9

[性能调整] 看看这个语句怎么优化

[复制链接]
论坛徽章:
4
奥运会纪念徽章:射击
日期:2008-10-24 13:23:422010新春纪念徽章
日期:2010-03-01 11:19:072010数据库技术大会纪念徽章
日期:2010-05-13 09:34:23ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
跳转到指定楼层
1#
发表于 2011-6-8 10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家看看这个语句怎么优化.表比较大 还有clob字段.


select *
  from (select row_.*, rownum rownum_
          from (select this_.ID           as ID74_0_,
                       this_.COLUMN_ID    as COLUMN2_74_0_,
                       this_.DEPT_EMP_ID  as DEPT3_74_0_,
                       this_.TITLE        as TITLE74_0_,
                       this_.CONTENT      as CONTENT74_0_,
                       this_.SOURCE       as SOURCE74_0_,
                       this_.HITS         as HITS74_0_,
                       this_.UPDATE_TIME  as UPDATE8_74_0_,
                       this_.CREATE_TIME  as CREATE9_74_0_,
                       this_.TOP_TIME     as TOP10_74_0_,
                       this_.AUTHOR       as AUTHOR74_0_,
                       this_.REPORT       as REPORT74_0_,
                       this_.STATUS       as STATUS74_0_,
                       this_.ATTACH       as ATTACH74_0_,
                       this_.PRE_TITLE    as PRE15_74_0_,
                       this_.SUB_TITLE    as SUB16_74_0_,
                       this_.FOCUS_NEWS   as FOCUS17_74_0_,
                       this_.SUMMARY      as SUMMARY74_0_,
                       this_.KEYWORDS     as KEYWORDS74_0_,
                       this_.PRIORITY     as PRIORITY74_0_,
                       this_.POSTER       as POSTER74_0_,
                       this_.VARIETY_CODE as VARIETY22_74_0_
                  from KIIIK.TB_ARTICLE this_
                 where this_.STATUS = :1
                 order by this_.TOP_TIME desc, this_.ID desc) row_
         where rownum <= :2)
where rownum_ > :3

2011-06-08_101001.jpg (111.85 KB, 下载次数: 11)

2011-06-08_101001.jpg
论坛徽章:
1
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
2#
发表于 2011-6-8 10:30 | 只看该作者
貌似status选择性不好,加个bitmap索引?

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
18
迷宫蛋
日期:2011-06-01 15:32:28蛋疼蛋
日期:2011-10-27 13:21:25ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41ITPUB社区千里马徽章
日期:2013-06-09 10:15:342014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31
3#
发表于 2011-6-8 10:30 | 只看该作者
这个语句不复杂,没什么优化的,主要看这个条件
where this_.STATUS = :1
怎么用?一般来说比如像all_objects表status=‘INVALID'的很少,如果传入的变量值基本都是
这样的话,可以考虑在这个列上建立索引!

使用道具 举报

回复
论坛徽章:
3
ITPUB9周年纪念徽章
日期:2010-10-08 09:32:26ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:53:54
4#
发表于 2011-6-8 10:33 | 只看该作者
把表TB_ARTICLE 的结构拿出来看看.

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
5#
发表于 2011-6-8 10:49 | 只看该作者
典型的分页优化,论坛里案例已经很多了

使用道具 举报

回复
论坛徽章:
3
2011新春纪念徽章
日期:2011-02-18 11:43:33ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26咸鸭蛋
日期:2011-11-04 13:14:24
6#
发表于 2011-6-8 10:52 | 只看该作者
典型的分页查询。
1.从应用角度选择合适的where 条件。
2.order by 字段上建立联合主键.

使用道具 举报

回复
论坛徽章:
4
奥运会纪念徽章:射击
日期:2008-10-24 13:23:422010新春纪念徽章
日期:2010-03-01 11:19:072010数据库技术大会纪念徽章
日期:2010-05-13 09:34:23ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
7#
 楼主| 发表于 2011-6-8 11:07 | 只看该作者


[ 本帖最后由 ouyangzi 于 2011-6-8 11:23 编辑 ]

2011-06-08_111202.jpg (51.63 KB, 下载次数: 14)

2011-06-08_111202.jpg

2011-06-08_111616.jpg (24.33 KB, 下载次数: 13)

2011-06-08_111616.jpg

2011-06-08_112235.jpg (17.4 KB, 下载次数: 11)

2011-06-08_112235.jpg

使用道具 举报

回复
论坛徽章:
0
8#
发表于 2011-6-8 11:11 | 只看该作者
对 CLOB 字段创建全文检索索引, 如下:

BEGIN
    CTX_DDL.CREATE_PREFERENCE('FOOBAR_LEXER', 'CHINESE_LEXER');
END;

DROP INDEX FOOBAR_IDX FORCE;

CREATE INDEX FOOBAR_IDX ON FOOBAR("FOO")
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS (
    'LEXER FOOBAR_LEXER'
)

这是创建的一个例子。

使用道具 举报

回复
论坛徽章:
68
2012新春纪念徽章
日期:2012-01-04 11:51:22奥运会纪念徽章:举重
日期:2012-08-02 22:17:14ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:312013年新春福章
日期:2013-02-25 14:51:24慢羊羊
日期:2015-03-04 14:51:352015年新春福章
日期:2015-03-06 11:57:312015年新春福章
日期:2015-06-11 12:54:06
9#
发表于 2011-6-8 11:35 | 只看该作者
google 分页优化,案例大把

使用道具 举报

回复
论坛徽章:
57
SQL极客
日期:2013-12-09 14:13:35秀才
日期:2016-01-21 13:42:39秀才
日期:2016-01-13 12:14:26SQL大赛参与纪念
日期:2016-01-13 10:32:19SQL数据库编程大师
日期:2016-01-13 10:30:43秀才
日期:2015-12-14 14:47:54秀才
日期:2015-10-19 15:50:392015年新春福章
日期:2015-03-06 11:58:18懒羊羊
日期:2015-03-04 14:52:11优秀写手
日期:2014-11-08 06:00:14
10#
发表于 2011-6-8 14:19 | 只看该作者
方案一:
create index idx_tuner on tb_article(decode(status,2,2,5,5));
analyze statistics on  idx_tuner  compute statistics ;
然后判断绑定变量值:
if  变量=1
then
原始sql语句,同时用/*+ no_index(table_name , index_name)  */  禁用表上status的索引。
else if  变量 in (2,5) then
将status  =  变量 修改成  decode(status,2,2,5,5)=变量,最好用/*+ index(tab_name,index_name) */  启用索引
记住这里最好要用变量实际值而非绑定变量
方案二:
不增加索引,对于原来status上的索引创建直方图,并定期刷新。
方案三:(如果方案一有效果,需要在一上进一步增强的话)
create index idx_tuner on tb_article(decode(status,2,2,5,5),top_time desc , id desc);
用索引排序去除表排序。

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表