Skip to content

Latest commit

 

History

History
61 lines (30 loc) · 1.86 KB

optimization.md

File metadata and controls

61 lines (30 loc) · 1.86 KB

mysql优化

引擎的选择

linux版本mysql5.5后默认引擎是innodb。

MyISAM不支持事务,如果表中绝大多数都只是读查询,可以考虑MyISAM。比如码表。

字段的选择

选择合适的字段类型,填充默认值,非空处理

long类型替换datetime,如果可以用int类型替换datetime

逆范式

逆范式是指打破范式,通过增加冗余或重复的数据来提高数据库的性能。

多做单边查询,少做联合查询

索引

不要过度索引。索引越多,占用空间越大,反而性能变慢;

只对WHERE子句中频繁使用的建立索引;

列独立

左原则 假如业务逻辑上出现: field like '%keywork%'类似查询,需要使用全文索引。

复合索引:一个索引关联多个字段,仅仅针对左边字段有效果。

OR的使用: 必须要保证 OR 两端的条件都存在可以用的索引,该查询才可以使用索引。

索引排序: 如果order by 排序需要的字段上存在索引,则可能使用到索引。

前缀索引: 前缀索引是建立索引关键字一种方案。通常会使用字段的整体作为索引关键字。有时,即使使用字段前部分数据,也可以去识别某些记录。就比如一个班级里,我要找王xx,假如姓王的只有1个人,那么就可以建一个前缀索引,就是王。

全文索引: 全文索引几乎不用,因为它不支持中文

加大缓存池

32位系统最大缓存池是4G; 64位系统理论上是

sql优化

对于并发性的SQL

少用(不用)多表操作(子查询,联合查询),而是将复杂的SQL拆分多次执行。如果查询很原子(很小),会增加查询缓存的利用率。

Limit 的使用

慢查询日志的使用

善于利用Explain 命令

分区分表

分库分表