MySQL优化总结--单表优化

★【单表优化】思路

【表设计】开始,字段尽可能精确,避免过多字段,避免null。数据库

【存储引擎】选择好。工具

【索引】设计好。优化

【查询优化】,between和exists优于in的使用;union all 比union的效率高。spa

【表分区】的使用。设计

上面属于单表优化的思路。若是还不能知足需求,就只能选择对数据库层级进行操做了(好比垂直拆分和水平拆分)。日志

表设计

可预知状况下字段尽可能准确

尽可能使用TINYINT、SMALLINT、MEDIUM_INT做为整数类型而非INT,若是非负则加上UNSIGNED索引

VARCHAR的长度只分配真正须要的空间字符串

使用枚举或整数代替字符串类型io

尽可能使用TIMESTAMP而非DATETIME

单表不要有太多字段,建议在20之内,去掉无用的字段

避免使用NULL字段,很难查询优化且占用额外索引空间

存储引擎--MyISAM和InnoDB

索引

索引列区分度要高

联合索引的区分度要看几个索引的联合。效率

字符型索引能够使用前缀索引(考虑区分度要高)。

索引列不能参与计算

会失效。

创建联合索引,并注意联合索引中各个字段的顺序

索引就是用空间换取时间,要占用存储空间的。

查询优化

避免使用 select *

in(1,2,3,4) 能够用 between 1 and 4来代替

尽可能使用 exists 而非 in

union all 比 union 效率要高,并且尽早的union

表分区

按月进行表分区实践。

系统级工具

使用explain

rows是核心指标,绝大部分rows小的语句执行必定很快。因此优化语句基本上都是在优化rows。

开启慢查询日志

相关文章
相关标签/搜索