设为首页收藏本站

小牛社区-大数据学习交流社区|大数据免费学习资源

 找回密码
 立即注册!

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 215|回复: 0

由大数据查询引发对SQL关联查询的思考

[复制链接]

132

主题

0

帖子

12

积分

吃土小白

Rank: 1

积分
12
发表于 7 天前 | 显示全部楼层 |阅读模式
今天由于数据库数据量很大,在SQL关联查询的时候,前端页面出现了连接超时的错误。经过本地DEBUG 拿出来SQL语句,到数据库查询。果然!查询贼慢。居然需要1分钟,甚至更多。
LEFT JOIN 关联查询:

LEFT关联查询
查看一下执行计划:


执行计划当中的 type=ALL 全表扫描, key 值 为空,连索引都没有用到,还有 Extra 这里边的意思不是太明确,但是一看就不是什么好的结果,应该是SQL语句需要优化的提示。

left join 执行,目前来看是会以 pro_dish 表作为驱动表,进行全表扫描以后,对其他表进行笛卡尔积查询。
INNER JOIN 关联查询:

INNER JOIN 关联查询
INNER JOIN 执行计划:


虽然执行计划跟 left join 的执行计划大同小异。但是,为什么inner join 却要比 left join 查询快2倍的效率。
我个人认为是,inner join 没有进行 笛卡尔积的计算?那位大神知道,希望指点。
子查询:

可以看到子查询明显更快了,这是因为,子查询中携带了条件。他会先在单表中,筛选中满足条件的数据。之后再去跟其他表关联查询。显然会快很多。但是,我后来又试了一下,子查询中不加条件的话,也是同样很慢。

最后,我只能在代码中,进行了条件的判断。后端写了多个查询方法,如果满足子查询条件的,走子查询的方法。不满足的走其他方法。目前,只能这么优化了。
具体SQL更深入的优化,还在进一步研究中。
有大神知道如何优化的,可以在下方留言讨论起来。
还有对于 explain 命令,如何查看SQL优化,明白的大神,指导一下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册!

x
回复

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表