SQL表关联中的逻辑与效率(二)

来源:互联网 发布:乐乎 编辑:程序博客网 时间:2024/06/16 05:15

之前写的《SQL表关联中的逻辑与效率》一开始计划的是还要写group by在关联中的效率问题的,结果写到一半被人叫走了给忘了……于是在这里补充一篇

接上一篇文章http://blog.csdn.net/strangerzz/article/details/45746621

二、关联中的group by
考虑下面两条语句

语句1    SELECT        t1.oid,        SUM(t2.f0007)    FROM        wrnophq.ne_cell_w t1    INNER JOIN        wrnophq.PERF_CELL_W_TRAFFIC_3 t2    ON        t1.oid = t2.oid    GROUP BY        t1.oid;

对比

语句2    SELECT        t1.oid,        t2.f0007    FROM        xxxx t1    INNER JOIN        (            SELECT                oid,                SUM(f0007) f0007            FROM                yyyy            GROUP BY                oid) t2    ON        t1.oid = t2.oid;

语句2的执行顺序已经很明显了,这里仅贴出语句1的执行计划如下:
语句1执行计划
可以看到,在这种语句中,语句1是先做关联,再做group by的。而语句2中先对t2做group by减少了结果的数量,再与t1做关联,这种方式的效率明显比t1的执行效率要高很多。

但是可以简单地用语句2代替语句1来提高查询效率吗?答案是否定的。因为根据处理的数据以及表关联的方式不同,语句1、2得到的结果并不总是相同的。比如,当t1和t2的关联为多对多的关联(即t1、t2中的oid都存在重复的时候,当然这种场景可能不多),或者当做JOIN的关键字段并没有全都出现在group by子句的时候(这种时候需要看具体情况了),以及其他一些我暂时没想到的情况。

总而言之,在一条语句中同时需要做group by和关联的时候,可以根据具体的情况来使用语句2的形式优化查询效率。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红米4a关不了机怎么办 红米手机屏幕锁了忘记密码怎么办 手机锁了忘记密码怎么办 红米 红米4a开不开机怎么办 红米显示小人开不了机怎么办 红米手机找回微信密码怎么办 红米手机密码忘了怎么办数字锁 红米1s忘了密码怎么办 红米手机下面三个键失灵怎么办 红米note手机没声音了怎么办 魅蓝3s被锁了怎么办 小米5x的4g网速慢怎么办 红米一体机与后盖有裂缝怎么办? 红米4x喇叭坏了怎么办 红米4x电池坏了怎么办 小米电视4a开不了机怎么办 小米x4手机下面三个键失灵怎么办 红米4a一直重启怎么办 红米4a手机一直关机重启怎么办 红米5A手机4G信号差怎么办 红米4x手机黑屏打不开怎么办 红米手机前置摄像头用不了怎么办 红米4a手机电池不耐用怎么办 红米6全网通联通网络不好怎么办 红米手机死机了怎么办不可拆卸电池 厦华电视指示灯亮但打不开机怎么办 oppo一体机的开机键坏了怎么办 小米手机长时间没用开不了机怎么办 红米2a充电坏了怎么办? 红米手机恢复出厂设置失败怎么办 红米关机强行恢复出厂失败怎么办 红米2a太卡了怎么办 红米2a上网好卡怎么办 红米1内部存储空间坏了怎么办 红米3s开关机键失灵怎么办 红米3s下面三个键失灵怎么办 红米3s手机掉水怎么办 红米手机用久了卡怎么办 红米4x手机不支持计步怎么办 红米4x手机耗电快怎么办 红米4a一体机手机死机怎么办