ITPUB论坛-中国最专业的IT技术社区

 
 注册
热搜:
12
返回列表 发新帖
楼主: 黄山情缘99

可否优化

[复制链接]
认证徽章
论坛徽章:
8
2009新春纪念徽章
日期:2009-01-04 14:52:28祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:24ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262013年新春福章
日期:2013-02-25 14:51:24沸羊羊
日期:2015-03-04 14:51:522015年新春福章
日期:2015-03-06 11:57:31
11#
发表于 2018-1-11 16:15 | 只看该作者
Johnelse 发表于 2018-1-10 11:53
1. 建索引 create index idx_t_columns_owner_tab_name on t_columns(owner, table_name);

2. 重写一 ...

1、你这样建索引只做到了一箭单雕;
2、你把楼主的t_columns.column_name给改没了。

使用道具 举报

回复
认证徽章
论坛徽章:
0
12#
发表于 2018-1-11 18:08 | 只看该作者
sqysl 发表于 2018-1-11 16:15
1、你这样建索引只做到了一箭单雕;
2、你把楼主的t_columns.column_name给改没了。

1. 我是建立多个索引, 测试发现数据库只用到这个索引(我的环境);
2. 呵呵,漏写了一个column

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2018-1-13 17:36 | 只看该作者
首先,说明一下这是一个测试,用例,但在生产环节中大家肯定 会遇到类似的SQL
其次,SQL SELECT的字段可能会很多,我们不要考虑 在所选的字段上建索引.建索引主意针对的是WHERE条件和ORDER  BY
SQL> select count(*) from t_objects;
  COUNT(*)
----------
     72171
SQL> select count(*) from t_columns;
  COUNT(*)
----------
     89204

使用道具 举报

回复
论坛徽章:
0
14#
 楼主| 发表于 2018-1-13 17:42 | 只看该作者
SQL> create index idx_t_objects_owner_name on t_objects(owner,object_name,last_ddl_time);

Index created.

SQL>   select * from table(dbms_xplan.display_cursor('cm7tmfgdu9721',null,'all'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  cm7tmfgdu9721, child number 0
-------------------------------------
select /*+ gather_plan_statistics */* from (        select t.*,rownum
as rn from                  (select
b.column_name,a.owner,a.object_type,a.last_ddl_time
        from  t_objects a                           left join t_columns
b on a.owner=b.owner                               and
a.object_name=b.table_name                           order by
last_ddl_time desc) t                 where rownum<100)         where
rn>80

Plan hash value: 3496801387

----------------------------------------------------------------------------------------------
| Id  | Operation                | Name      | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT         |           |       |       |       |  2342 (100)|          |
|*  1 |  VIEW                    |           |    99 |  6633 |       |  2342   (1)| 00:00:29 |
|*  2 |   COUNT STOPKEY          |           |       |       |       |            |          |
|   3 |    VIEW                  |           | 72171 |  3805K|       |  2342   (1)| 00:00:29 |
|*  4 |     SORT ORDER BY STOPKEY|           | 72171 |  6061K|  6808K|  2342   (1)| 00:00:29 |
|*  5 |      HASH JOIN OUTER     |           | 72171 |  6061K|  4232K|   907   (1)| 00:00:11 |
|   6 |       TABLE ACCESS FULL  | T_OBJECTS | 72171 |  3383K|       |   288   (1)| 00:00:04 |
|   7 |       TABLE ACCESS FULL  | T_COLUMNS | 89204 |  3310K|       |   202   (1)| 00:00:03 |
----------------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - SEL$2        / from$_subquery$_001@SEL$1
   2 - SEL$2
   3 - SEL$6A1B73E7 / T@SEL$2
   4 - SEL$6A1B73E7
   6 - SEL$6A1B73E7 / A@SEL$4
   7 - SEL$6A1B73E7 / B@SEL$3

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("RN">80)
   2 - filter(ROWNUM<100)
   4 - filter(ROWNUM<100)
   5 - access("A"."OBJECT_NAME"="B"."TABLE_NAME" AND "A"."OWNER"="B"."OWNER")

使用道具 举报

回复
论坛徽章:
0
15#
 楼主| 发表于 2018-1-13 17:43 | 只看该作者
已经执行过
SQL> create index idx_t_columns on t_columns(owner,table_name);
就是说 t_columns是已经有索引的了

使用道具 举报

回复
论坛徽章:
0
16#
 楼主| 发表于 2018-1-13 20:48 | 只看该作者
SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  dtxxs27u0mr9v, child number 0
-------------------------------------
select /*+ gather_plan_statistics */* from (        select t.*,rownum
as rn from                  (select
b.column_name,a.owner,a.object_type,a.last_ddl_time
        from  tobj20k a                           left join t_columns b
on a.owner=b.owner                               and
a.object_name=b.table_name                           order by
last_ddl_time desc) t                 where rownum<100)         where
rn>80

Plan hash value: 1832677289

--------------------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name          | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |
--------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |               |      1 |        |     19 |00:00:00.03 |     136 |     59 |
|*  1 |  VIEW                           |               |      1 |     99 |     19 |00:00:00.03 |     136 |     59 |
|*  2 |   COUNT STOPKEY                 |               |      1 |        |     99 |00:00:00.03 |     136 |     59 |
|   3 |    VIEW                         |               |      1 |     99 |     99 |00:00:00.03 |     136 |     59 |
|   4 |     NESTED LOOPS OUTER          |               |      1 |     99 |     99 |00:00:00.03 |     136 |     59 |
|   5 |      TABLE ACCESS BY INDEX ROWID| TOBJ20K       |      1 |   2002K|     71 |00:00:00.03 |      76 |     51 |
|   6 |       INDEX FULL SCAN           | IDX_TOBJ20K   |      1 |     99 |     71 |00:00:00.03 |       5 |      3 |
|   7 |      TABLE ACCESS BY INDEX ROWID| T_COLUMNS     |     71 |      1 |     30 |00:00:00.01 |      60 |      8 |
|*  8 |       INDEX RANGE SCAN          | IDX_T_COLUMNS |     71 |      1 |     30 |00:00:00.01 |      59 |      7 |
--------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("RN">80)
   2 - filter(ROWNUM<100)
   8 - access(SYS_OP_UNDESCEND("A"."SYS_NC00017$")="B"."OWNER" AND
              SYS_OP_UNDESCEND("A"."SYS_NC00018$")="B"."TABLE_NAME")


35 rows selected.

使用道具 举报

回复
论坛徽章:
0
17#
 楼主| 发表于 2018-1-13 20:54 | 只看该作者
可能误导了大家, t_objects比t_columns 要大的时候,要建last_ddl_time desc,owner desc,object_name desc 的索引

使用道具 举报

回复

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

本版积分规则

DTCC2018购票6.8折优惠进行时

中国数据库技术大会是国内数据库及大数据领域规模最大、最受欢迎的技术交流盛会。 2018年5月10-12日,第九届中国数据库技术大会将如约而至。本届大会以“数领先机•智赢未来”为主题,设定2大主会场及20个技术专场,邀请来自国内外互联网、金融、教育等行业百余位技术专家,共同探讨Oracle、MySQL、NoSQL、大数据等领域的前瞻性热点话题与技术。
----------------------------------------
优惠时间:2018年2月13日前

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 |
  | | |
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表
北京赛车pk10 申博官网 北京赛车pk10 六台宝典现场开奖 北京赛车pk10历史记录 北京赛车开奖 北京赛车预测 949494开奖结果今晚 威尼斯人线上娱乐 手机投注平台 幸运28投注技巧 pk10助赢软件 北京pk10百度鼎盛彩票网 北京赛车聚彩 北京pk10如何稳杀3码 pk10稳赢方法 pk10定位计划 pk10包赢计划群