mysql优化一般包括:sql语句优化,索引优化,表的优化,服务器的优化等
其中个人最重要的是索引优化
索引优化可以解决大多是sql的性能问题,下面是一些,加了索引,可能会出现用不到索引的情况。
1,在使用like语句进行模糊查找时,%不能放在第一位,最好放在字段后面,这样可以避免有索引但是用不到索引问题
2,在使用where条件语句时,where后面的or或者and条件二端的字段必须同时使用索引时,索引才能生效,否则都有不到索引
3,mysql还提供了一个常量值,来检验你的数据库是否需要加索引,
show status like 'Handler_read_key'; 这个Handler_read_key是指一个行被索引值读的次数,当然是越高越好
show status like 'Handler_read_rnd_next';这个Handler_read_rnd_next的值越高,说明查询运行效率低下,需要增加索引来补救。
4,优化group by和order by 尽量的少使用他们,如果使用group by时默认会对结果排序,影响速度,我们可以取消排序来提速,
group by + 条件字段+order by null 来停止排序。
5,还有尽量的不使用嵌套查询,嵌套查询会是外部的表不能使用索引,只能嵌套表可以使用索引,我们可以使用普通的t1.id=t2.uid方式来取代嵌套查询,更便捷的是我们可以使用左连接来代替嵌套查询(左连接可以是二个表都使用索引)
6、表的优化:
(1)检测表是否有错误
check table 表名
(2)优化表的空间
optimize table 表名;可以将表中的碎片和空洞移除,如果表数据量大的时候,要在空闲的时候做,此操作会占用cpu和内存,影响使用
6、当大数据量进行插入和导出时,可以使用load data + outfile/infile来操作,导出时,只导出表的数据,而不导出表的结构和操作语句,节省空间和时间
而我们平常使用的mysqldump语句导出数据,会把表的结构和操作语句都全部导出,更要命的是,会把导出表的数据库中的表锁定,影响使用。
接着在进行大数据量导入和导出时,我们还可以通过使用关闭索引来提高导入和导出的速度,等导入和导出后开启索引
alter table 表名 disable keys; 关闭索引 alter table 表名 enable keys;开启索引
注意:关闭索引时,一般只关闭普通索引,而不关闭唯一索引(当你完全确认不会有重复行时,也可以关闭唯一索引)
还有一点就是对于innodb类型的表,可以使用导入或者导出前关闭事务的自动提交,等导入或导出后,开启事务统一提交事务