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

 找回密码
 注册
查看: 799|回复: 19

SQL是否还有优化的空间?

[复制链接]
论坛徽章:
0
发表于 2018-1-12 10:36 | 显示全部楼层 |阅读模式
请教各位老师,高人:
select a.*, b.createtime as bounddate
  from T_CARD a
right join T_CARD2USER b
    on a.id = b.cardid
where b.userid = 1000
   and a.cardtype = 2
order by a.effectedend

sql_plan:
Plan hash value: 4243566911

-------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |                 |       |       |    48 (100)|          |
|   1 |  SORT ORDER BY                |                 |    11 |  2211 |    48   (3)| 00:00:01 |
|   2 |   NESTED LOOPS                |                 |    11 |  2211 |    47   (0)| 00:00:01 |
|   3 |    TABLE ACCESS BY INDEX ROWID| T_CARD2USER     |    11 |   231 |    14   (0)| 00:00:01 |
|*  4 |     INDEX RANGE SCAN          | IDX_CARD2USER_U |    11 |       |     4   (0)| 00:00:01 |
|*  5 |    TABLE ACCESS BY INDEX ROWID| T_CARD          |     1 |   180 |     3   (0)| 00:00:01 |
|*  6 |     INDEX UNIQUE SCAN         | SYS_C0010639    |     1 |       |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------

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

   4 - access("B"."USERID"=:1)
   5 - filter("A"."CARDTYPE"=2)
   6 - access("A"."ID"="B"."CARDID")


索引情况T_CARD2USER :

Index                          Column                     Col Column
Name                           Name                       Pos Details
------------------------------ ------------------------- ---- ------------------------
IDX_CARD2USER_CID_UID          CARDID                       1 NUMBER(11,0) NOT NULL
                               USERID                       2 NUMBER(11,0) NOT NULL
IDX_CARD2USER_U                USERID                       1 NUMBER(11,0) NOT NULL
SYS_C0010640                   ID                           1 NUMBER(11,0) NOT NULL


索引情况T_CARD:

Index                          Column                     Col Column
Name                           Name                       Pos Details
------------------------------ ------------------------- ---- ------------------------
IDX_CARD_BAFCB                 CARDBATCH                    1 NUMBER(11,0) NOT NULL
                               ACTIVATED                    2 NUMBER(11,0) NOT NULL
                               FROZEN                       3 NUMBER(11,0) NOT NULL
                               CANCELED                     4 NUMBER(11,0) NOT NULL
                               BOUND                        5 NUMBER(11,0)
IDX_CARD_CARDNUM               CARDNUMBER                   1 VARCHAR2(64)
SYS_C0010639                   ID                           1 NUMBER(11,0) NOT NULL





认证徽章
论坛徽章:
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
发表于 2018-1-12 12:57 | 显示全部楼层
t_card2user.userid看起来选择性应该还不错,如果结果集不大,提升也不会很大,就这样吧。

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2018-1-12 14:21 | 显示全部楼层
sqysl 发表于 2018-1-12 12:57
t_card2user.userid看起来选择性应该还不错,如果结果集不大,提升也不会很大,就这样吧。

这条SQL造成的Cluster Wait Time较高
Cluster Wait Time (s)        Executions        %Total        Elapsed Time(s)        %Clu        %CPU        %IO        SQL Id        SQL Module        SQL Text
81,326.34        2,224,846        60.68        192,790.25        42.18        5.26        53.44        gjvn3cmcp2qrg        JDBC Thin Client        select a.* , b.createtime as b...

使用道具 举报

回复
论坛徽章:
307
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
发表于 2018-1-12 14:38 | 显示全部楼层
看看这两条件的选择行如何?

b.userid = 1000  and a.cardtype = 2

使用道具 举报

回复
认证徽章
论坛徽章:
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
发表于 2018-1-12 14:42 | 显示全部楼层
iuai 发表于 2018-1-12 14:21
这条SQL造成的Cluster Wait Time较高
Cluster Wait Time (s)        Executions        %Total        Elapsed Time(s)        %Clu        % ...

cluster wait time和SQL调优没多大关系,主要还是应用分片或负载均衡的原因吧。

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2018-1-12 15:00 | 显示全部楼层
ZALBB 发表于 2018-1-12 14:38
看看这两条件的选择行如何?

b.userid = 1000  and a.cardtype = 2

基本每秒都有gc buffer busy acquire ,或者写和读都在一个节点上完成,这个好实现吗? 另外userid选择性一般,SQL执行效率也不太好

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2018-1-12 15:00 | 显示全部楼层
ZALBB 发表于 2018-1-12 14:38
看看这两条件的选择行如何?

b.userid = 1000  and a.cardtype = 2

不太好
Column                    Column                       Distinct          Number     Number Global User           Sample Date
Name                      Details                        Values Density Buckets      Nulls Stats  Stats            Size MM-DD-YYYY
------------------------- ------------------------ ------------ ------- ------- ---------- ------ ------ -------------- ----------
BINDSOURCE                VARCHAR2(32)                        7       0       1 ########## YES    NO         38,810,950 12-11-2017
ID                        NUMBER(11,0) NOT NULL     184,961,012       0     254          0 YES    NO              5,562 12-11-2017
CARDID                    NUMBER(11,0) NOT NULL     182,714,368       0     254          0 YES    NO              5,562 12-11-2017
USERID                    NUMBER(11,0) NOT NULL      17,588,224       0     254          0 YES    NO              5,562 12-11-2017
MID                       NUMBER(11,0) NOT NULL               6       0       1          0 YES    NO        184,961,012 12-11-2017
REASONOBJTYPEID           NUMBER(11,0) NOT NULL               6       0       1          0 YES    NO        184,961,012 12-11-2017
REASONOBJID               NUMBER(11,0) NOT NULL      13,970,432       0       1          0 YES    NO        184,961,012 12-11-2017
DESCRIPTION               VARCHAR2(128)                 232,464       0       1 ########## YES    NO         74,929,722 12-11-2017
CREATETIME                DATE NOT NULL              29,007,872       0     254          0 YES    NO              5,562 12-11-2017

使用道具 举报

回复
论坛徽章:
61
马上有车
日期:2014-02-18 16:41:11ITPUB8周年纪念徽章
日期:2009-10-09 16:31:51祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:20生肖徽章2007版:龙
日期:2009-09-10 11:23:34蓝色妖姬
日期:2009-09-10 10:55:27紫蜘蛛
日期:2009-09-10 10:55:22玉兔
日期:2009-09-10 10:55:17嫦娥
日期:2009-09-10 10:55:12九尾狐狸
日期:2009-09-10 10:55:07
发表于 2018-1-12 15:41 | 显示全部楼层
right join  不能用union all 代替吗?分成b.userid = 1000  and a.cardtype = 2  和out join 的部分

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2018-1-12 16:03 | 显示全部楼层
dianxing 发表于 2018-1-12 15:41
right join  不能用union all 代替吗?分成b.userid = 1000  and a.cardtype = 2  和out join 的部分

不太擅长改写SQL

使用道具 举报

回复
认证徽章
论坛徽章:
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
发表于 2018-1-12 16:12 | 显示全部楼层
iuai 发表于 2018-1-12 15:00
不太好
Column                    Column                       Distinct          Number     Numbe ...

嗯,如果条件列选择性不好,你这个计划性能好不了。
两个表大概多大?两个条件大概各能返回多少行?

使用道具 举报

回复

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

本版积分规则

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