MySQL的SQL等价改写

来源:这里教程网 时间:2026-03-01 16:15:26 作者:

自己原文公众号: 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其实不是和需求等价的。只是你觉得或者我以为,虽然结果一样但是实际过程完全不一样。

相关推荐