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

 找回密码
 注册
12
返回列表 发新帖
楼主: iuai

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:26 | 显示全部楼层
dianxing 发表于 2018-1-12 15:41
right join  不能用union all 代替吗?分成b.userid = 1000  and a.cardtype = 2  和out join 的部分

union all代替right join?估计不行啊。

使用道具 举报

回复
论坛徽章:
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 16:31 | 显示全部楼层
sqysl 发表于 2018-1-12 16:26
union all代替right join?估计不行啊。

之前优化过out join的感觉没什么优化空间 ,之后用union all 重写了一遍好用不少

select a.*,
       b.createtime as bounddate
from   T_CARD a , T_CARD2USER b
where  a.id = b.cardid
and    b.userid = 1000
and    a.cardtype = 2

union all

select a 所有列用null替代,
       b.createtime as bounddate
from   T_CARD2USER b
where  b.userid = 1000
and    not exists ( select 1 from T_CARD a
                     where a.id = b.cardid
                     and   a.cardtype = 2
                     and   b.userid = 1000)

order by effectedend

使用道具 举报

回复
认证徽章
论坛徽章:
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:49 | 显示全部楼层
dianxing 发表于 2018-1-12 16:31
之前优化过out join的感觉没什么优化空间 ,之后用union all 重写了一遍好用不少

select a.*,

,还真没这么玩过,呵呵。
楼主可以试试。

使用道具 举报

回复
认证徽章
论坛徽章:
22
咸鸭蛋
日期:2012-04-19 22:15:41摩羯座
日期:2015-12-02 12:26:30托尼托尼·乔巴
日期:2016-12-29 12:51:28射手座
日期:2016-05-16 21:14:07弗兰奇
日期:2016-12-04 22:53:10技术图书徽章
日期:2016-11-05 10:34:54射手座
日期:2016-06-17 10:18:56蒙奇·D·路飞
日期:2017-03-17 17:18:21罗罗诺亚·索隆
日期:2017-03-17 17:24:44娜美
日期:2017-05-19 14:49:04
发表于 2018-1-12 17:25 | 显示全部楼层
创建索引T_CARD2USER.createtime,T_CARD2USER.cardid 避免不必要太多的回表

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2018-1-12 18:36 | 显示全部楼层
dianxing 发表于 2018-1-12 16:31
之前优化过out join的感觉没什么优化空间 ,之后用union all 重写了一遍好用不少

select a.*,

多谢,下周试一下,再来反馈

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2018-1-12 18:36 | 显示全部楼层
sqysl 发表于 2018-1-12 16:26
union all代替right join?估计不行啊。

下周我试一下,再来反馈 谢谢

使用道具 举报

回复
论坛徽章:
304
奥迪
日期:2013-07-29 13:45:59红旗
日期:2014-02-07 10:47:20路虎
日期:2014-02-13 10:34:03保时捷
日期:2014-02-14 09:46:462014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
发表于 2018-1-12 21:36 | 显示全部楼层
采集这两字段的柱状图信息,再真实跑一遍,看看实际的执行计划如何?

b.userid = 1000
   and a.cardtype = 2

使用道具 举报

回复
论坛徽章:
304
奥迪
日期:2013-07-29 13:45:59红旗
日期:2014-02-07 10:47:20路虎
日期:2014-02-13 10:34:03保时捷
日期:2014-02-14 09:46:462014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14
发表于 2018-1-12 21:37 | 显示全部楼层
还有一点,可以考虑把此查询,作成 ON COMMIT 的物化视图,那就不用关联了,直接 SELECT

使用道具 举报

回复
论坛徽章:
0
 楼主| 发表于 2018-1-16 16:43 | 显示全部楼层
dianxing 发表于 2018-1-12 16:31
之前优化过out join的感觉没什么优化空间 ,之后用union all 重写了一遍好用不少

select a.*,

您好:
我是这么写的,问题很多 不知道应该怎么改写才对,另外 a 表和b 表中又重复的字段 id ,DESCRIPTION
select ID,
       CARDTYPE,
       ISVIRTUAL,
       AMOUNT,
       CARDBATCH,
       EFFECTEDBEGIN,
       EFFECTEDEND,
       ACTIVATEDBEGIN,
       ACTIVATEDEND,
       ACTIVATED,
       FROZEN,
       CANCELED,
       DESCRIPTION,
       CREATEMID,
       CREATEUSERID,
       CREATEDATE,
       MODIFYMID,
       MODIFYUSERID,
       MODIFYDATE,
       RANDOMPWD,
       PWDRANDOM,
       PWDHASH,
       CARDNUMBER,
       BOUND,
       ISMULTIPLEUSE,
       REMAINAMOUNT,
       SALESTATU,
       REALPAYAMOUNT,
       ISINVOICE,
       BUYUSERID,
       BUYTIME,
       PWD,
       ISOUT,
       b.createtime as bounddate
  from T_CARD a, T_CARD2USER b
where a.id = b.cardid
   and b.userid = 1000
   and a.cardtype = 2
union all (select 'null' as ID,
                  'null' as CARDTYPE,
                  'null' as ISVIRTUAL,
                  'null' as AMOUNT,
                  'null' as CARDBATCH,
                  'null' as EFFECTEDBEGIN,
                  'null' as EFFECTEDEND,
                  'null' as ACTIVATEDBEGIN,
                  'null' as ACTIVATEDEND,
                  'null' as ACTIVATED,
                  'null' as FROZEN,
                  'null' as CANCELED,
                  'null' as DESCRIPTION,
                  'null' as CREATEMID,
                  'null' as CREATEUSERID,
                  'null' as CREATEDATE,
                  'null' as MODIFYMID,
                  'null' as MODIFYUSERID,
                  'null' as MODIFYDATE,
                  'null' as RANDOMPWD,
                  'null' as PWDRANDOM,
                  'null' as PWDHASH,
                  'null' as CARDNUMBER,
                  'null' as BOUND,
                  'null' as ISMULTIPLEUSE,
                  'null' as REMAINAMOUNT,
                  'null' as SALESTATU,
                  'null' as REALPAYAMOUNT,
                  'null' as ISINVOICE,
                  'null' as BUYUSERID,
                  'null' as BUYTIME,
                  'null' as PWD,
                  'null' as ISOUT,
                  b.createtime as bounddate
             from T_CARD2USER b
            where b.userid = 1000
              and not exists (select 1
                     from T_CARD a
                    where a.id = b.cardid
                      and a.cardtype = 2
                      and b.userid = 1000))
order by EFFECTEDEND

使用道具 举报

回复

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

本版积分规则

DTCC2018购票6.8折优惠进行时

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

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