这么骚的SQL进阶技巧,不怕被揍么?( 六 )


?使用 EXPLAIN 来查看 SQL 执行计划
上个点说了 , 可以使用 EXPLAIN 来分析 SQL 的执行情况 , 如怎么发现上文中的最左匹配原则不生效呢 , 执行 「EXPLAIN+SQL 语句」可以发现 key 为 None , 说明确实没有命中索引:

这么骚的SQL进阶技巧,不怕被揍么?

文章插图
 
我司在提供 SQL 查询的同时 , 也贴心地加了一个 EXPLAIN 功能及 SQL 的优化建议 , 建议各大公司效仿 , 如图示:
这么骚的SQL进阶技巧,不怕被揍么?

文章插图
 
  • 批量插入 , 速度更快
当需要插入数据时 , 批量插入比逐条插入性能更高 。
推荐用:
-- 批量插入 INSERT INTO TABLE (id, user_id, title) VALUES (1, 2, 'a'),(2,3,'b'); 不推荐用:
INSERT INTO TABLE (id, user_id, title) VALUES (1, 2, 'a'); INSERT INTO TABLE (id, user_id, title) VALUES (2,3,'b'); 批量插入 SQL 执行效率高的主要原因是合并后日志量 MySQL 的 binlog 和 innodb 的事务让日志减少了 , 降低日志刷盘的数据量和频率 , 从而提高了效率 。
  • 慢日志 SQL 定位
前面我们多次说了 SQL 的慢查询 , 那么该怎么定位这些慢查询 SQL 呢 , 主要用到了以下几个参数:
这么骚的SQL进阶技巧,不怕被揍么?

文章插图
 
这几个参数一定要配好 , 再根据每条慢查询对症下药 , 像我司每天都会把这些慢查询提取出来通过邮件给形式发送给各个业务团队 , 以帮忙定位解决 。
小结:业务生产中可能还有很多 CASE 导致了慢查询 , 其实细细品一下 , 都会发现这些都和 MySQL 索引的底层数据 B+ 树有莫大的关系 。
总结
本文一开始花了挺大的篇幅来讲解 SQL 的规范 , 请大家务必重视这部分内部 , 良好的规范有利于团队协作 , 对于代码的阅读也比较友好 。
之后介绍了一些 SQL 的比较高级的用法 , 巧用这些技巧确实能达到事半功倍的效果 。




推荐阅读