您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> MYSQL >> SQL from多表和 inner join的区别

SQL from多表和 inner join的区别(1/2)

来源:网络整理     时间:2016/7/27 1:46:22     关键词:

关于网友提出的“ SQL from多表和 inner join的区别”问题疑问,本网通过在网上对“ SQL from多表和 inner join的区别”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: SQL from多表和 inner join的区别
描述:

这是inner join写法

SELECT
    B.dict_data_name,
    SUM(A.pv) AS pv
FROM
    shw_mo_health_news A
INNER JOIN bas_dict_data B ON A.third_name_dictid = B.item_id
WHERE
    A.class_level = 3
AND B.class_id = 1012
AND A.collect_date >= '2016-04-01'
AND A.collect_date <= '2016-05-31'
GROUP BY
    A.third_name_dictid
ORDER BY
    pv DESC;

实际查询时间用户0.6S左右

用explain 查看:


这是from 多表写法

SELECT
    B.dict_data_name,
    A.PV
FROM
    (
        SELECT
            hn.third_name_dictid,
            SUM(hn.pv) AS PV
        FROM
            shw_mo_health_news hn
        WHERE
            hn.class_level = 3
        AND hn.collect_date >= '2016-04-01'
        AND hn.collect_date <= '2016-05-31'
        GROUP BY
            hn.third_name_dictid
    ) A,
    (
        SELECT
            dd.item_id,
            dd.dict_data_name
        FROM
            bas_dict_data dd
        WHERE
            dd.class_id = 1012
    ) B
WHERE
    A.third_name_dictid = B.item_id
ORDER BY
    PV DESC

实际用时0.03s左右

Explain查看


为什么这两种查询方式的效率会有这么大的差别呢?
网上很多都说这两种写法的效率是差不多的;但是我这一个是0.6 和一个0.03,两者差别还是挺大的,这是什么原因造成的呢?是因为我写的SQl语句有问题还是别的原因?


解决方案1:

理论上说,子查询和JOIN没有本质区别,在查询分析器合理的优化之后应该是等效的。但是也正是由于查询分析器的各种缺陷,有些时候有些版本的数据库对子查询支持得更好,有些则对JOIN支持得更好。MySQL来说我见过的大部分版本子查询和JOIN是等效的,但是要小心的是子查询位于WHERE中的场景,比如:

相关图片

相关文章