MySQL性能优化

1、合理的创建及使用索引,索引不宜过多,过多的索引会占用更多的空间,而且每次增、删、改操作都会重建索引。

2、合理的冗余字段(尽量建一些大表,考虑数据库的三范式和业务设计的取舍)。

3、select语句中尽量不要使用*、count(*)。

从表中读取越多的数据,查询会变得更慢,因为它会增加了磁盘操作时间和数据网络传输时间。

4、合理利用慢查询日志、explain执行计划查询、show profile查看SQL执行时的资源使用情况。

使用EXPLAIN关键字可以让你了解MySQL正在进行什么样的查询操作,这可以帮助你发现瓶颈的所在,并显示出查询或表结构在哪里出了问题。EXPLAIN查询的结果,可以告诉你那些索引正在被引用,表是如何被扫描和排序的等等。

5、表关联查询时务必遵循小表驱动大表原则。

例: user表10000条数据,class表20条数据

select * from user u left join class c u.userid=c.userid

这样则需要用user表循环10000次才能查询出来,而如果用class表驱动user表则只需要循环20次就能查询出来。

如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: 


6、使用查询语 where 条件时,不允许出现函数,否则索引会失效;

7、使用单表查询时,相同字段尽量不要用 or和in


8、LIKE 语句不允许使用 like '%XX'或者like '%XX%,否则索引会失效,但是用左前缀匹配,"key%"这种方式,仍然会使用索引。

假如索引列name的值为'ABA','ABB','ACC',如果where name like '%AC'条件,由于条件前面是模糊的,所以不能利用索引的顺序,必须逐个查找,看是否满足条件,这样会导致全索引扫描或者全表扫描。

如果是where name  ike 'AC%',就可以查找code中AC开头的数据,当碰到AB开头的数据时,就可以停止查找了,这样可以提高查询效率。

9、在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,否则索引会失效;

比如:SELECT * FROM table WHERE name = '张三' AND age = 18,那么该组合索引必须是 name,age 形式;

示例:对列col1、列col2和列col3建一个联合索引 :KEY test_col1_col2_col3 on test(col1,col2,col3);

联合索引 test_col1_col2_col3 实际建立了(col1)、(col1,col2)、(col,col2,col3)三个索引。

SELECT * FROM test WHERE col1='1' AND clo2='2' AND clo4='4'

上面这个查询语句执行时会依照最左前缀匹配原则,检索时会使用索引(col1,col2)进行数据匹配。

10、索引长度尽量短。短索引可以节省索引空间,使查找的速度得到提升,同时内存中也可以装载更多的索引键值。

11、每张表都必须有 主键,达到加快查询效率的目的;

12、分表、分库、分区。

13、如果sql语句中含有order by,那么建议为此后的列和where字句所含字段建立索引.

你可能感兴趣的:(MySQL性能优化)