加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

8种最坑的SQL错误用法,你有没有踩过坑?

发布时间:2020-02-07 15:34:19 所属栏目:MySql教程 来源:站长网
导读:副标题#e# 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。 好吧,可能90%以上的 DBA 解决

8种最坑的SQL错误用法,你有没有踩过坑?

新的执行计划:

8种最坑的SQL错误用法,你有没有踩过坑?

6、条件下推外部查询条件不能够下推到复杂的视图或子查询的情况有:

聚合子查询;

含有 LIMIT 的子查询;

UNION 或 UNION ALL 子查询;

输出字段中的子查询;

如下面的语句,从执行计划可以看出其条件作用于聚合子查询之后:

8种最坑的SQL错误用法,你有没有踩过坑?

 

8种最坑的SQL错误用法,你有没有踩过坑?

确定从语义上查询条件可以直接下推后,重写如下: 

8种最坑的SQL错误用法,你有没有踩过坑?

执行计划变为:

8种最坑的SQL错误用法,你有没有踩过坑?

7、提前缩小范围先上初始 SQL 语句:

8种最坑的SQL错误用法,你有没有踩过坑?

数为90万,时间消耗为12秒。

8种最坑的SQL错误用法,你有没有踩过坑?

由于最后 WHERE 条件以及排序均针对最左主表,因此可以先对 my_order 排序提前缩小数据量再做左连接。SQL 重写后如下,执行时间缩小为1毫秒左右。

8种最坑的SQL错误用法,你有没有踩过坑?

再检查执行计划:子查询物化后(select_type=DERIVED)参与 JOIN。虽然估算行扫描仍然为90万,但是利用了索引以及 LIMIT 子句后,实际执行时间变得很小。

8种最坑的SQL错误用法,你有没有踩过坑?

8、中间结果集下推

再来看下面这个已经初步优化过的例子(左连接中的主表优先作用查询条件):

8种最坑的SQL错误用法,你有没有踩过坑?

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读