ITPub博客

首页 > 数据库 > MySQL > MySQL的SQL等价改写

MySQL的SQL等价改写

原创 MySQL 作者:xuexiaogang 时间:2021-12-13 10:36:04 0 删除 编辑

自己原文公众号: https://mp.weixin.qq.com/s/3QNx3z1Q4TAMmrHC8qh3Rw

    先上一下实验数据。


再上一句SQL:

SELECT 

    *

FROM

    h1,

    h3

WHERE

    h1.id = h3.id

        AND (h1.name) IN (SELECT 

            h1.name

        FROM

            h1,

            h3

        WHERE

            h1.id = h3.id

                AND (h1.name) IN (SELECT 

                    h1.name

                FROM

                    h1,

                    h3

                WHERE

                    h1.id = h3.id AND h1.id IN (1)

                GROUP BY h1.id , h1.name)

        GROUP BY h1.id , h1.name)

        AND h1.id IN (1);


为什么会写成这样?连美化都美化不出来?

别问我,我也不知道。只有你想不到的没有做不到的。写出这样的人也不容易,但是呢,好像无用功太多了。

我只是将实际的表名换了一下,数据也换了一下。

执行结果如图:

看一下,他就一行,但是由于层层嵌套。扫描了4行。

等价改写以后:

SELECT

    *

FROM

   h1,

   h3

WHERE

   h1.id = h3.id

       AND h1.id IN (1);



一般来说真实环境的数据绝对不是1行这样的数据,那么嵌套起来扫描的就多了很多了。


需求来了不是来就写,写一定要等价,其实日常中我发现很多SQL其实不是和需求等价的。只是你觉得或者我以为,虽然结果一样但是实际过程完全不一样。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/637517/viewspace-2847322/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: MySQL的死锁
请登录后发表评论 登录
全部评论
OracleACE/PostgreSQLACE/阿里云MVP/腾讯云TVP/墨天轮 MVP/TiDBMVA/数盟会华东区长老/OpenTenBase社区委和技术委委员/架构师技术同盟名人堂成员上海地区理事会成员/if社区联合发起人/《DBA实战手记》作者/公众号:四海内皆兄弟

注册时间:2013-07-01

  • 博文量
    422
  • 访问量
    953204