业务中如果有唯一特性的字段,即使是多个字段的组合,也尽量都建成唯一索引。尽管唯一索引会影响插入效率,但是对于查询的速度提升是非常明显的。此外,还能够提供校验机制,如果没有唯一索引,高并发场景下,可能还会产生脏数据。
4)多表关联时,要确保关联字段上必须有索引
5)创建索引时避免建立错误的认识
索引越多越好,认为一个查询就需要建一个索引。
宁缺勿滥,认为索引会消耗空间、严重拖慢更新和新增速度。
抵制唯一索引,认为业务的唯一性一律需要在应用层通过“先查后插”方式解决。
过早优化,在不了解系统的情况下就开始优化。
6)最佳索引实践口诀
如果你觉得上面哪些太啰嗦,有朋友已总结为一套优化口诀,优化SQL时也能提个醒吧。
全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算,范围之后全失效;
Like百分写最右,覆盖索引不写星;
不等空值还有or,索引失效要少用;
VAR引号不可丢,SQL高级也不难!
7)EXPLAIN 执行计划实践总结
如果还是觉得 EXPLAIN 执行计划列太多了,也记不住呀,那么请重点关注以下几列:
第1列:ID越大,执行的优先级越高;ID相等,从上往下优先顺序执行。
第2列:select_type 查询语句的类型,SIMPLE简单查询,PRIMARY复杂查询,DERIVED衍生查询(from子查询的临时表),派生表。
第4列:请重点掌握,type类型,查询效率优先级:system->const->eq_ref->ref->range->index->ALL
ALL 是最差的,system 是最好的,性能最佳,阿里巴巴开发规约中要求最差也得到 range 级别,而不能有 index、ALL。
最后,对于后端工程师而言,尽力都能掌握 EXPLAIN 的使用,写完SQL请习惯性的用它帮助你分析一下,做一个对SQL性能有追求的程序员,因为SQL也是程序员必备技能,将慢查询问题拍死在项目上线前夕。
如果觉得本文有所收获,欢迎转发分享。
参考资料:
MySQL官网
https://www.cnblogs.com/songwenjie/p/9402295.html
https://www.cnblogs.com/phpdragon/p/8231533.html
欢迎关注我的公众号,扫二维码关注获得更多精彩原创文章,与你一同成长~