# SQL 调优原则 (A)

+ SQL 调优是个系统工程,可能会涉及:
  + 数据库
  + 缓存
  + 应用
  + 产品, 等等
------------------------------------------------------------
1. SQL 调优是个系统工程，可能会设计数据库、缓存、应用、产品等
   
2. 使用合适的索引进行检索和排序，避免全表扫描、大量数据的排序和运算
  - 索引要有较高的选择度
  - 综合考虑索引使用频率和索引代价
  - 频繁更新的字段不适合建索引

3. 避免无法使用到索引的用法
  - 避免隐式数据类型转换（类型不匹配）
  - 避免对索引字段使用函数
  - 避免对检索字段开始使用模糊查询：'%abc'
  - 避免在 where 子句中使用 != 或 <> 操作符
  - 索引过滤后数据量过大，可能导致优化器选择走全表扫描

4. 使用复合索引需要遵守最左索引原则
  - 复合索引必须按照索引中字段顺序使用字段,前导的索引字段不使用,就没法用到后续的索引字段
  - 复合索引中,如果前导字段使用范围查询,那么后续字段就无法利用索引过滤和排序

5. 尽量避免复杂查询（多表 join 、子查询等）
  - 永远用小结果集驱动大结果集
  - 多表 join  关联字段需要有索引
  - 多表 join 尽量用 inner join 
  - 可以使用 STRAIGHT_JOIN 指定 join 顺序

6. 如果可以请用 truncate 代替 delete

7. TIDB 个性化优化
  - 主键、唯一键点查询优化
  - 注意历史版本（mvcc）对查询的影响
