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拆分多次执行。如果查询很原子(很小),会增加查询缓存的利用率。
Limit 的使用
慢查询日志的使用