查看: 3391|回复: 8

[sql优化?]菜鸟不解order by会提高查询速度?

[复制链接]
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59
发表于 2011-10-11 09:58 | 显示全部楼层 |阅读模式
  1.   SELECT C.ID,
  2.          P.PHONE_NO,
  3.          TO_CHAR(C.LAST_SERVICE_DATE, 'yyyy-mm-dd hh24:mi:ss'),
  4.          u.name
  5.     FROM CUSTOMER_INFO C
  6.     LEFT JOIN PHONE_INFO P
  7.       ON C.ID = P.CUSTOMER_ID
  8.     LEFT JOIN user_v u
  9.       ON c.ownerid=u.id
  10.    WHERE P.PHONE_NO IN
  11.          (SELECT PHONE_NO
  12.             FROM CUST_CHONGFU_TEM
  13.            GROUP BY PHONE_NO
  14.           HAVING LENGTH(TRANSLATE(WMSYS.WM_CONCAT(UNAME), 'Temp' || WMSYS.WM_CONCAT(UNAME), 'Temp')) / 4 >= 1 AND LENGTH(TRANSLATE(WMSYS.WM_CONCAT(UNAME), 'xxx||           WMSYS.WM_CONCAT(UNAME), 'xxx)) IS NULL
  15.   
  16.    ) AND C.ENABLED_FLAG = 1;
复制代码
  1. SELECT C.ID,
  2.          P.PHONE_NO,
  3.          TO_CHAR(C.LAST_SERVICE_DATE, 'yyyy-mm-dd hh24:mi:ss'),
  4.          u.name
  5.     FROM CUSTOMER_INFO C
  6.     LEFT JOIN PHONE_INFO P
  7.       ON C.ID = P.CUSTOMER_ID
  8.     LEFT JOIN user_v u
  9.       ON c.ownerid=u.id
  10.    WHERE P.PHONE_NO IN
  11.          (SELECT PHONE_NO
  12.             FROM CUST_CHONGFU_TEM
  13.            GROUP BY PHONE_NO
  14.           HAVING LENGTH(TRANSLATE(WMSYS.WM_CONCAT(UNAME), 'Temp' || WMSYS.WM_CONCAT(UNAME), 'Temp')) / 4 >= 1 AND LENGTH(TRANSLATE(WMSYS.WM_CONCAT(UNAME), 'xxx'||WMSYS.WM_CONCAT(UNAME), 'xxx))  IS NULL
  15.    )
  16.     AND C.ENABLED_FLAG = 1
  17.    ORDER BY phone_no;
复制代码
几乎相同的2个sql,唯一区别是后者多了个order by phone_no,理论上加了order by 应该降低查询速度,但是前者执行花了8秒多,后者却只用了0.2秒
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
发表于 2011-10-11 10:00 | 显示全部楼层
加了order by计划变了

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59
 楼主| 发表于 2011-10-11 10:02 | 显示全部楼层
哦。。。计划是什么。。。什么情况下可以用order by加快查询速度?

使用道具 举报

回复
论坛徽章:
44
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562012新春纪念徽章
日期:2012-02-13 15:10:58
发表于 2011-10-11 10:07 | 显示全部楼层
把两个查询的执行计划发出来,如果对执行计划不了解可以百度一下

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59
 楼主| 发表于 2011-10-11 10:10 | 显示全部楼层
谢谢,我去研究下

使用道具 举报

回复
论坛徽章:
49
2010广州亚运会纪念徽章:台球
日期:2010-09-14 17:25:29ITPUB官方微博粉丝徽章
日期:2011-07-11 13:10:57ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-03-15 14:24:252012新春纪念徽章
日期:2012-01-04 11:53:54紫蛋头
日期:2012-03-07 10:09:01生肖徽章2007版:龙
日期:2012-03-07 10:13:00蜘蛛蛋
日期:2012-04-01 11:20:46奥运会纪念徽章:艺术体操
日期:2012-08-06 09:08:41奥运会纪念徽章:艺术体操
日期:2012-08-27 17:37:53
发表于 2011-10-11 10:25 | 显示全部楼层
贴出来执行计划看看呗,了解下!

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59
 楼主| 发表于 2011-10-11 10:44 | 显示全部楼层
前者的执行计划:
Plan hash value: 290483864

-------------------------------------------------------------------------------------------------------------
| Id  | Operation                        | Name             | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                 |                  |   123K|    38M|       |  1821   (3)| 00:00:22 |
|*  1 |  HASH JOIN RIGHT OUTER           |                  |   123K|    38M|       |  1821   (3)| 00:00:22 |
|   2 |   VIEW                           | USER_V           |   952 |   251K|       |   827   (1)| 00:00:10 |
|   3 |    HASH UNIQUE                   |                  |   952 |  3797K|    14M|   827   (1)| 00:00:10 |
|   4 |     NESTED LOOPS OUTER           |                  |   952 |  3797K|       |    12   (9)| 00:00:01 |
|*  5 |      HASH JOIN RIGHT OUTER       |                  |   952 |  3793K|       |    12   (9)| 00:00:01 |
|   6 |       TABLE ACCESS FULL          | USERS_ROLES      |  1220 |  8540 |       |     3   (0)| 00:00:01 |
|*  7 |       HASH JOIN OUTER            |                  |   884 |  3516K|       |     9  (12)| 00:00:01 |
|*  8 |        TABLE ACCESS FULL         | USERS            |   884 | 34476 |       |     5   (0)| 00:00:01 |
|   9 |        VIEW                      |                  |   133 |   523K|       |     3   (0)| 00:00:01 |
|* 10 |         CONNECT BY WITH FILTERING|                  |       |       |       |            |          |
|* 11 |          FILTER                  |                  |       |       |       |            |          |
|  12 |           TABLE ACCESS FULL      | DEPTS            |   133 |  2394 |       |     3   (0)| 00:00:01 |
|* 13 |          HASH JOIN               |                  |       |       |       |            |          |
|  14 |           CONNECT BY PUMP        |                  |       |       |       |            |          |
|  15 |           TABLE ACCESS FULL      | DEPTS            |   133 |  2394 |       |     3   (0)| 00:00:01 |
|  16 |          TABLE ACCESS FULL       | DEPTS            |   133 |  2394 |       |     3   (0)| 00:00:01 |
|* 17 |      INDEX UNIQUE SCAN           | SYS_C009064      |     1 |     5 |       |     0   (0)| 00:00:01 |
|* 18 |   FILTER                         |                  |       |       |       |            |          |
|* 19 |    HASH JOIN OUTER               |                  |   115K|  5956K|       |   992   (5)| 00:00:12 |
|  20 |     MERGE JOIN CARTESIAN         |                  | 12564 |   466K|       |   153   (4)| 00:00:02 |
|  21 |      VIEW                        | VW_NSO_1         |  2503 | 42551 |       |     9  (12)| 00:00:01 |
|* 22 |       FILTER                     |                  |       |       |       |            |          |
|  23 |        SORT GROUP BY             |                  |     1 |   669K|       |     9  (12)| 00:00:01 |
|  24 |         TABLE ACCESS FULL        | CUST_CHONGFU_TEM |  2503 |   669K|       |     8   (0)| 00:00:01 |
|  25 |      BUFFER SORT                 |                  | 12564 |   257K|       |   153   (4)| 00:00:02 |
|* 26 |       TABLE ACCESS FULL          | CUSTOMER_INFO    | 12564 |   257K|       |   142   (3)| 00:00:02 |
|* 27 |     TABLE ACCESS FULL            | PHONE_INFO       |   138K|  2024K|       |   836   (5)| 00:00:11 |
-------------------------------------------------------------------------------------------------------------

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

   1 - access("C"."OWNERID"="U"."ID"(+))
   5 - access("U"."ID"="UR"."USER_ID"(+))
   7 - access("D"."ID"(+)="U"."DEPT_ID")
   8 - filter("U"."ENABLED_FLAG"=1)
  10 - filter("PARENT_ID"=0)
  11 - filter("PARENT_ID"=0)
  13 - access("PARENT_ID"=NULL)
  17 - access("R"."ID"(+)="UR"."ROLE_ID")
  18 - filter("P"."PHONE_NO"="$nso_col_1")
  19 - access("C"."ID"="P"."CUSTOMER_ID"(+))
  22 - filter(LENGTH(TRANSLATE("WMSYS"."WM_CONCAT"("UNAME"),'Temp'||"WMSYS"."WM_CONCAT"("UNAME"),'Tem
              p'))/4>=1 AND LENGTH(TRANSLATE("WMSYS"."WM_CONCAT"("UNAME"),'xxx'||"WMSYS"."WM_CONCAT"("UNAME"),'xxx'))/3 IS NULL)
  26 - filter("C"."ENABLED_FLAG"=1)
  27 - filter("P"."CUSTOMER_ID"(+) IS NOT NULL)

Note
-----
   - 'PLAN_TABLE' is old version
   - dynamic sampling used for this statement

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59
 楼主| 发表于 2011-10-11 10:44 | 显示全部楼层
后者的执行计划:
Plan hash value: 1882886178

---------------------------------------------------------------------------------------------------------------
| Id  | Operation                          | Name             | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                   |                  |   123K|    37M|       |  9769   (1)| 00:01:58 |
|   1 |  MERGE JOIN SEMI                   |                  |   123K|    37M|       |  9769   (1)| 00:01:58 |
|   2 |   SORT JOIN                        |                  |   123K|    35M|    74M|  9759   (1)| 00:01:58 |
|*  3 |    HASH JOIN RIGHT OUTER           |                  |   123K|    35M|       |  1811   (3)| 00:00:22 |
|   4 |     VIEW                           | USER_V           |   952 |   243K|       |   827   (1)| 00:00:10 |
|   5 |      HASH UNIQUE                   |                  |   952 |  3797K|    14M|   827   (1)| 00:00:10 |
|   6 |       NESTED LOOPS OUTER           |                  |   952 |  3797K|       |    12   (9)| 00:00:01 |
|*  7 |        HASH JOIN RIGHT OUTER       |                  |   952 |  3793K|       |    12   (9)| 00:00:01 |
|   8 |         TABLE ACCESS FULL          | USERS_ROLES      |  1220 |  8540 |       |     3   (0)| 00:00:01 |
|*  9 |         HASH JOIN OUTER            |                  |   884 |  3516K|       |     9  (12)| 00:00:01 |
|* 10 |          TABLE ACCESS FULL         | USERS            |   884 | 34476 |       |     5   (0)| 00:00:01 |
|  11 |          VIEW                      |                  |   133 |   523K|       |     3   (0)| 00:00:01 |
|* 12 |           CONNECT BY WITH FILTERING|                  |       |       |       |            |          |
|* 13 |            FILTER                  |                  |       |       |       |            |          |
|  14 |             TABLE ACCESS FULL      | DEPTS            |   133 |  2394 |       |     3   (0)| 00:00:01 |
|* 15 |            HASH JOIN               |                  |       |       |       |            |          |
|  16 |             CONNECT BY PUMP        |                  |       |       |       |            |          |
|  17 |             TABLE ACCESS FULL      | DEPTS            |   133 |  2394 |       |     3   (0)| 00:00:01 |
|  18 |            TABLE ACCESS FULL       | DEPTS            |   133 |  2394 |       |     3   (0)| 00:00:01 |
|* 19 |        INDEX UNIQUE SCAN           | SYS_C009064      |     1 |     5 |       |     0   (0)| 00:00:01 |
|* 20 |     HASH JOIN OUTER                |                  |   115K|  4045K|       |   982   (5)| 00:00:12 |
|* 21 |      TABLE ACCESS FULL             | CUSTOMER_INFO    | 12564 |   257K|       |   142   (3)| 00:00:02 |
|* 22 |      TABLE ACCESS FULL             | PHONE_INFO       |   138K|  2024K|       |   836   (5)| 00:00:11 |
|* 23 |   SORT UNIQUE                      |                  |  2503 | 42551 |       |    11  (28)| 00:00:01 |
|  24 |    VIEW                            | VW_NSO_1         |  2503 | 42551 |       |     9  (12)| 00:00:01 |
|* 25 |     FILTER                         |                  |       |       |       |            |          |
|  26 |      SORT GROUP BY                 |                  |  2503 |   669K|       |     9  (12)| 00:00:01 |
|  27 |       TABLE ACCESS FULL            | CUST_CHONGFU_TEM |  2503 |   669K|       |     8   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------------------

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

   3 - access("C"."OWNERID"="U"."ID"(+))
   7 - access("U"."ID"="UR"."USER_ID"(+))
   9 - access("D"."ID"(+)="U"."DEPT_ID")
  10 - filter("U"."ENABLED_FLAG"=1)
  12 - filter("PARENT_ID"=0)
  13 - filter("PARENT_ID"=0)
  15 - access("PARENT_ID"=NULL)
  19 - access("R"."ID"(+)="UR"."ROLE_ID")
  20 - access("C"."ID"="P"."CUSTOMER_ID"(+))
  21 - filter("C"."ENABLED_FLAG"=1)
  22 - filter("P"."CUSTOMER_ID"(+) IS NOT NULL)
  23 - access("P"."PHONE_NO"="$nso_col_1")
       filter("P"."PHONE_NO"="$nso_col_1")
  25 - filter(LENGTH(TRANSLATE("WMSYS"."WM_CONCAT"("UNAME"),'Temp'||"WMSYS"."WM_CONCAT"("UNAME"),'Temp'
              ))/4>=1 AND LENGTH(TRANSLATE("WMSYS"."WM_CONCAT"("UNAME"),'xxx'||"WMSYS"."WM_CONCAT"("UNAME"),'xxx'))/3
               IS NULL)

Note
-----
   - 'PLAN_TABLE' is old version
   - dynamic sampling used for this statement

使用道具 举报

回复
招聘 : SAP实施
论坛徽章:
9
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442010新春纪念徽章
日期:2010-03-01 11:20:53SQL大赛参与纪念
日期:2011-04-13 12:08:17ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:50:44茶鸡蛋
日期:2012-02-29 11:04:04鲜花蛋
日期:2012-03-13 13:54:13蛋疼蛋
日期:2012-05-28 16:48:46
发表于 2011-10-11 18:20 | 显示全部楼层
本帖最后由 ai2ming 于 2011-10-11 18:20 编辑

|  20 |     MERGE JOIN CARTESIAN         |                  | 12564 |   466K|       |   153   (4)| 00:00:02 |
|  21 |      VIEW                        | VW_NSO_1         |  2503 | 42551 |       |     9  (12)| 00:00:01 |
|* 22 |       FILTER                     |                  |       |       |       |            |          |
|  23 |        SORT GROUP BY             |                  |     1 |   669K|       |     9  (12)| 00:00:01 |
|  24 |         TABLE ACCESS FULL        | CUST_CHONGFU_TEM |  2503 |   669K|       |     8   (0)| 00:00:01 |
|  25 |      BUFFER SORT                 |                  | 12564 |   257K|       |   153   (4)| 00:00:02 |
|* 26 |       TABLE ACCESS FULL          | CUSTOMER_INFO    | 12564 |   257K|       |   142   (3)| 00:00:02 |
第一个执行计划确实有问题,21行的结果集返回估计结果为2503条,25行的结果集12564条,这个时候还做笛卡尔集运算,效率肯定不高。

你在session级别把笛卡尔运算禁用后,再对比两个语句的运行效率。
alter session set "_optimizer_mjc_enabled" = false;

使用道具 举报

回复

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

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

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