mysql优化总结

sql语句优化

1 查询尽量使用到索引,避免全表扫描

2 尽量避免无法使用索引而全表扫描的操作,如:数字与字符之间做等值、使用%s%和%s模糊查询、使用!=或<>操作符、使用 or 来连接条件、in 和 not in 也要慎用、where 子句中对字段进行表达式和函数操作、没有使用复合索引的前缀索引等。

(在某些情况下,or条件可以避免全表扫描的。1where 语句里面如果带有or条件, myisam表能用到索引, innodb不行2 .必须所有的or条件都必须是独立索引)

3 避免索引冗余,也不要建立过多索引,推荐索引个数不要超过7个

4 应尽量避免在 where 子句中对字段进行 null 值判断

5 不要使用select *取所有字段

6 insert要指明字段名

7 尽量避免大事务操作,提高系统并发能力

8 join表不推荐超过2个,JOIN表越多,性能消耗越大,系统并发能力越低


表优化

9 推荐使用InnoDB表(并发读写性况下好于MyISAM、支持事务、表不易损坏),使用单列自增主键(递增与InnoDB本身数据的存储原理相契合,有利于数据的顺序存储及读取,更好的避免插入过程中的数据分页)

10 字段及表必须要有COMMENT

11 字段及表名不要使用关键字

12 字段设置为非NULL

13 字段类型:varchar代替char,时间使用uint,ip使用uint,不推荐使用BLOB,TEXT等大字段

14 拆分大表

15 不推荐使用MySQL本身不擅长或有性能问题的功能,如:触发器(Triger) 、存储过程(Procedure)、外键(Foreign Key)、函数(Function)、视图(Views)、事件(Event)等,主要原因在于与业务耦合太大,或是某些场景下可能造成主从不一致,或是不利于线上追查问题,或是不利于统一运维等。

 

其他

16删除表中的所有记录,应使用TRUNCATETABLE语句

17 使用count(*)计数

18 优化order by语句,MySQL的弱点之一是它的排序。虽然MySQL可以在1秒中查询大约15,000条记录,但由于MySQL在查询时最多只能使用一个索引。因此,如果WHERE条件已经占用了索引,那么在排序中就不使用索引了,这将大大降低查询的速度。建立适当的复合索引可以解决这个问题

你可能感兴趣的:(mysql,mysql,优化)