12
返回列表 发新帖
楼主: vepeta

一条select语句查询很慢,如何确定问题所在?两个表相关联

[复制链接]
论坛徽章:
6
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:猴
日期:2008-01-02 17:35:53生肖徽章2007版:兔
日期:2008-01-02 17:35:53生肖徽章2007版:虎
日期:2008-01-02 17:35:53生肖徽章2007版:牛
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53
11#
 楼主| 发表于 2008-3-25 17:27 | 只看该作者
原帖由 棉花糖ONE 于 2008-3-25 17:24 发表
select /*+ use_hash(m,s) ordered full(s) */ count(0) from  mobile_mark m,notealy_send s where (substr(s.smssend_mobile,1,7)=m.mark_mobile or substr(s.smssend_mobile,3,7)=m.mark_mobile) and s.smssend_error!='0' and s.smssend_time>=to_date('2007-2-25 00:00:00','syyyy-mm-dd hh24:mi:ss');

这语句和原来那语句的逻辑读对比下看看

执行结果如下:
SQL> select /*+ use_hash(m,s) ordered full(s) */ count(0) from  mobile_mark m,notealy_send s where (substr(s.smssend_mobile,1,7)=m.mark_mobile or substr(s.smssend_mobile,3,7)=m.mark_mobile) and s.smssend_error!='0' and s.smssend_time>=to_date('2007-2-25 00:00:00','syyyy-mm-dd hh24:mi:ss');

  COUNT(0)
----------
     22099


Execution Plan
----------------------------------------------------------
Plan hash value: 3140874208

---------------------------------------------------------------------------------------------
| Id  | Operation            | Name         | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |              |     1 |    29 |       | 27622   (1)| 00:05:32 |
|   1 |  SORT AGGREGATE      |              |     1 |    29 |       |            |          |
|   2 |   CONCATENATION      |              |       |       |       |            |          |
|*  3 |    HASH JOIN         |              |   854K|    23M|  1856K| 13811   (1)| 00:02:46 |
|   4 |     TABLE ACCESS FULL| MOBILE_MARK  | 94746 |   740K|       |   434   (1)| 00:00:06 |
|*  5 |     TABLE ACCESS FULL| NOTEALY_SEND |   854K|    17M|       | 11942   (1)| 00:02:24 |
|*  6 |    HASH JOIN         |              | 42744 |  1210K|  1856K| 13811   (1)| 00:02:46 |
|   7 |     TABLE ACCESS FULL| MOBILE_MARK  | 94746 |   740K|       |   434   (1)| 00:00:06 |
|*  8 |     TABLE ACCESS FULL| NOTEALY_SEND |   854K|    17M|       | 11942   (1)| 00:02:24 |
---------------------------------------------------------------------------------------------

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

   3 - access("M"."MARK_MOBILE"=SUBSTR("S"."SMSSEND_MOBILE",3,7))
   5 - filter("S"."SMSSEND_TIME">=TO_DATE('2007-02-25 00:00:00', 'yyyy-mm-dd
              hh24:mi:ss') AND "S"."SMSSEND_ERROR"<>'0')
   6 - access("M"."MARK_MOBILE"=SUBSTR("S"."SMSSEND_MOBILE",1,7))
       filter(LNNVL("M"."MARK_MOBILE"=SUBSTR("S"."SMSSEND_MOBILE",3,7)))
   8 - filter("S"."SMSSEND_TIME">=TO_DATE('2007-02-25 00:00:00', 'yyyy-mm-dd
              hh24:mi:ss') AND "S"."SMSSEND_ERROR"<>'0')

使用道具 举报

回复
论坛徽章:
138
19周年集字徽章-19
日期:2020-06-08 08:30:56马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02路虎
日期:2013-11-22 12:26:18问答徽章
日期:2014-05-08 12:15:31
12#
发表于 2008-3-25 17:29 | 只看该作者
对比2个语句的逻辑读啊

set timing on
set autot trace 
run sql

[ 本帖最后由 棉花糖ONE 于 2008-3-25 17:32 编辑 ]

使用道具 举报

回复
论坛徽章:
6
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:猴
日期:2008-01-02 17:35:53生肖徽章2007版:兔
日期:2008-01-02 17:35:53生肖徽章2007版:虎
日期:2008-01-02 17:35:53生肖徽章2007版:牛
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53
13#
 楼主| 发表于 2008-3-25 17:37 | 只看该作者
原帖由 棉花糖ONE 于 2008-3-25 17:29 发表
对比2个语句的逻辑读啊

set timing on
set autot trace 
run sql

如下
SQL> set autotrace on
SQL> select /*+ use_hash(m,s) ordered full(s) */ count(0) from  mobile_mark m,notealy_send s where (substr(s.smssend_mobile,1,7)=m.mark_mobile or substr(s.smssend_mobile,3,7)=m.mark_mobile) and s.smssend_error!='0' and s.smssend_time>=to_date('2007-2-25 00:00:00','syyyy-mm-dd hh24:mi:ss');

  COUNT(0)
----------
     22099
Elapsed: 00:00:01.14

Execution Plan
----------------------------------------------------------
Plan hash value: 3140874208

---------------------------------------------------------------------------------------------
| Id  | Operation            | Name         | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |              |     1 |    29 |       | 27622   (1)| 00:05:32 |
|   1 |  SORT AGGREGATE      |              |     1 |    29 |       |            |          |
|   2 |   CONCATENATION      |              |       |       |       |            |          |
|*  3 |    HASH JOIN         |              |   854K|    23M|  1856K| 13811   (1)| 00:02:46 |
|   4 |     TABLE ACCESS FULL| MOBILE_MARK  | 94746 |   740K|       |   434   (1)| 00:00:06 |
|*  5 |     TABLE ACCESS FULL| NOTEALY_SEND |   854K|    17M|       | 11942   (1)| 00:02:24 |
|*  6 |    HASH JOIN         |              | 42744 |  1210K|  1856K| 13811   (1)| 00:02:46 |
|   7 |     TABLE ACCESS FULL| MOBILE_MARK  | 94746 |   740K|       |   434   (1)| 00:00:06 |
|*  8 |     TABLE ACCESS FULL| NOTEALY_SEND |   854K|    17M|       | 11942   (1)| 00:02:24 |
---------------------------------------------------------------------------------------------

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

   3 - access("M"."MARK_MOBILE"=SUBSTR("S"."SMSSEND_MOBILE",3,7))
   5 - filter("S"."SMSSEND_TIME">=TO_DATE('2007-02-25 00:00:00', 'yyyy-mm-dd
              hh24:mi:ss') AND "S"."SMSSEND_ERROR"<>'0')
   6 - access("M"."MARK_MOBILE"=SUBSTR("S"."SMSSEND_MOBILE",1,7))
       filter(LNNVL("M"."MARK_MOBILE"=SUBSTR("S"."SMSSEND_MOBILE",3,7)))
   8 - filter("S"."SMSSEND_TIME">=TO_DATE('2007-02-25 00:00:00', 'yyyy-mm-dd
              hh24:mi:ss') AND "S"."SMSSEND_ERROR"<>'0')


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
     110432  consistent gets
          0  physical reads
          0  redo size
        413  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> select /*+ use_hash(m,s) ordered full(s) */ count(0) from notealy_send s,mobile_mark m where (substr(s.smssend_mobile,1,7)=m.mark_mobile or substr(s.smssend_mobile,3,7)=m.mark_mobile) and s.smssend_error!='0' and s.smssend_time>=to_date('2007-2-25 00:00:00','syyyy-mm-dd hh24:mi:ss');

  COUNT(0)
----------
     22099
Elapsed: 00:00:01.11

Execution Plan
----------------------------------------------------------
Plan hash value: 3771521855

---------------------------------------------------------------------------------------------
| Id  | Operation            | Name         | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |              |     1 |    29 |       | 27626   (1)| 00:05:32 |
|   1 |  SORT AGGREGATE      |              |     1 |    29 |       |            |          |
|   2 |   CONCATENATION      |              |       |       |       |            |          |
|*  3 |    HASH JOIN         |              |   854K|    23M|    26M| 13813   (1)| 00:02:46 |
|*  4 |     TABLE ACCESS FULL| NOTEALY_SEND |   854K|    17M|       | 11942   (1)| 00:02:24 |
|   5 |     TABLE ACCESS FULL| MOBILE_MARK  | 94746 |   740K|       |   434   (1)| 00:00:06 |
|*  6 |    HASH JOIN         |              | 42744 |  1210K|    26M| 13813   (1)| 00:02:46 |
|*  7 |     TABLE ACCESS FULL| NOTEALY_SEND |   854K|    17M|       | 11942   (1)| 00:02:24 |
|   8 |     TABLE ACCESS FULL| MOBILE_MARK  | 94746 |   740K|       |   434   (1)| 00:00:06 |
---------------------------------------------------------------------------------------------

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

   3 - access("M"."MARK_MOBILE"=SUBSTR("S"."SMSSEND_MOBILE",3,7))
   4 - filter("S"."SMSSEND_TIME">=TO_DATE('2007-02-25 00:00:00', 'yyyy-mm-dd
              hh24:mi:ss') AND "S"."SMSSEND_ERROR"<>'0')
   6 - access("M"."MARK_MOBILE"=SUBSTR("S"."SMSSEND_MOBILE",1,7))
       filter(LNNVL("M"."MARK_MOBILE"=SUBSTR("S"."SMSSEND_MOBILE",3,7)))
   7 - filter("S"."SMSSEND_TIME">=TO_DATE('2007-02-25 00:00:00', 'yyyy-mm-dd
              hh24:mi:ss') AND "S"."SMSSEND_ERROR"<>'0')


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
     110432  consistent gets
          0  physical reads
          0  redo size
        413  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

[ 本帖最后由 vepeta 于 2008-3-25 17:41 编辑 ]

使用道具 举报

回复
论坛徽章:
76
双子座
日期:2015-07-28 14:26:072012新春纪念徽章
日期:2012-02-13 15:09:52ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15鲜花蛋
日期:2011-08-26 02:02:24管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:皮划艇
日期:2011-04-18 11:24:412011新春纪念徽章
日期:2011-02-18 11:43:342011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:15
14#
发表于 2008-3-25 18:39 | 只看该作者
看错 不好意思

[ 本帖最后由 paulyibinyi 于 2008-3-25 18:41 编辑 ]

使用道具 举报

回复
论坛徽章:
138
19周年集字徽章-19
日期:2020-06-08 08:30:56马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02路虎
日期:2013-11-22 12:26:18问答徽章
日期:2014-05-08 12:15:31
15#
发表于 2008-3-25 19:32 | 只看该作者
最开始没加hint最nest loop的时候的情况是怎样的

使用道具 举报

回复
论坛徽章:
0
16#
发表于 2008-3-26 03:59 | 只看该作者
Could you tell us what indexes you have on both tables ? What are the index definition ?

使用道具 举报

回复
论坛徽章:
139
2009日食纪念
日期:2009-07-22 09:30:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:21祖国60周年纪念徽章
日期:2009-10-09 08:28:002010年世界杯参赛球队:葡萄牙
日期:2010-01-18 09:23:302010年世界杯参赛球队:意大利
日期:2010-01-21 07:30:192010年世界杯参赛球队:南非
日期:2010-01-22 09:48:242010年世界杯参赛球队:加纳
日期:2010-02-13 16:34:422010新春纪念徽章
日期:2010-03-01 11:04:572010年世界杯参赛球队:斯洛伐克
日期:2010-05-21 11:24:312010年世界杯参赛球队:塞尔维亚
日期:2010-06-30 13:43:14
17#
发表于 2008-3-26 10:42 | 只看该作者
what is your db optimizer_mode?
try:
select /*+ all_rows */ count(0) from ......

使用道具 举报

回复

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

本版积分规则 发表回复

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