【表设计】开始,字段尽可能精确,避免过多字段,避免null。数据库
【存储引擎】选择好。工具
【索引】设计好。优化
【查询优化】,between和exists优于in的使用;union all 比union的效率高。spa
【表分区】的使用。设计
上面属于单表优化的思路。若是还不能知足需求,就只能选择对数据库层级进行操做了(好比垂直拆分和水平拆分)。日志
尽可能使用TINYINT、SMALLINT、MEDIUM_INT做为整数类型而非INT,若是非负则加上UNSIGNED索引
VARCHAR的长度只分配真正须要的空间字符串
使用枚举或整数代替字符串类型io
联合索引的区分度要看几个索引的联合。效率
字符型索引能够使用前缀索引(考虑区分度要高)。
会失效。
索引就是用空间换取时间,要占用存储空间的。
避免使用 select *
in(1,2,3,4) 能够用 between 1 and 4来代替
尽可能使用 exists 而非 in
union all 比 union 效率要高,并且尽早的union
按月进行表分区实践。
rows是核心指标,绝大部分rows小的语句执行必定很快。因此优化语句基本上都是在优化rows。