减少磁盘 IO,这个又可以说是尽量避免全表扫描、尽量使用索引以及尽量使用覆盖索引。
减少内存 CPU 消耗,这一部分主要是尽可能减少排序、分组、去重之类的操作。
EXPALIN 命令的大概用法是 EXPLAIN your_sql,然后数据库就会返回一个执行计划
执行计划有很多字段,最关键的几个字段:
type:指的是查询到所需行的方式,从好到坏依次是 system > const > eq_ref > ref > range > index > ALL。
system 和 const 都可以理解为数据库只会返回一行数据,所以查询时间是固定的。
eq_ref 和 ref 字面意思是根据索引的值来查找。
range:索引范围扫描。
index:索引全表扫描,也就是扫描整棵索引。
ALL:全表扫描,发起磁盘 IO 的那种全表扫描。possible_keys:候选的索引。
key:实际使用的索引。
rows:扫描的行数。数据库可能扫描了很多行之后才找到你需要的数据。
filtered:查找到你所需的数据占 rows 的比例。