前言
上一篇文章 《MySQL索引原理机器优化》讲了索引的一些原理以及优化方案,这一次学习对查询的优化,毕竟快速的查找到数据才是我们的最终目的.
分析查询
想要对一条查询语句进行优化,首先要对其进行分析,MySQL提供了这个机制, 可以通过explain sql
或者desc sql
的语法去获取MySQL对某一条语句的执行计划(MySQL优化之后的),explain
的用法这里就不再赘述了,在另外一篇文章中有详细的解读.
查询优化
对一条sql的优化可以分为两部分,第一部分是对语句的优化,比如将子查询改写为join等,第二部分是与索引相关的优化,在这一阶段可能会修改语句以让查询尽可能的命中索引,甚至会通过修改索引来达到这个目的.
与索引相关的优化
首先我们需要让查询尽可能的命中索引,通常情况下在一张表上会有各种花里胡哨的查询,我们很难让每一个查询都完美命中,因此我们假设认为我们在为bad case 做优化,不考虑对其他的查询造成的影响.
最左前缀
在使用联合索引的时候,要想多字段命中索引,需要遵循最左前缀原则.
假如现在表上有school_age
的联合索引,那么下面的语句是可以使用索引的:
# 根据school查询
select * from user where school = '卡塞尔'
# 根据scholl和age进行查询
select * fr