mysql性能优化

Posted 皇甫哲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql性能优化相关的知识,希望对你有一定的参考价值。

性能优化

myql数据库优化的原则:

1.减少系统的瓶颈。

2.减少资源的占用。

3.增加系统的反应速度。

 

 

优化查询

1.索引对查询的影响

比如有一个表student表,有id、name、sex、no,4个字段,里面有20条记录,如果没有索引时,查询no=20的学生。

sql语句是SELECT * from student WHERE no =\'20\'。分析当前sql :执行 explain SELECT * from student WHERE no =\'20\'

 

这样可以看到rows是20,也就是说查询扫描了20条记录。

  • select_type:SIMPLE,这个不是很关键,只是表示这是一次简单的查询,没有join,没有union,没有中间表
  • type:ALL,表示该次SQL进行了全表查询

在no字段使用索引后

看到结果是1,证明查询的时候只扫描了一条记录。查询速度自然比不使用索引快。而且possible_keys和key都可以说明使用了索引。

 

2.使用索引查询

(1)使用like查询时

如果第一个字符是%,索引不起作用,只要%不在第一位置索引才起作用。

(2)使用多列索引查询

mysql可以为多个字段创建索引,一个索引可以包含16个字段,只有查询条件中使用了这些字段的第一个字段时,索引才有用。

(3)使用or关键字查询

查询条件只有or关键字,且or前后两个条件都是索引时,查询才会使用索引。

3.避免使用select *

查询内容越多,自然越慢。

4.永远为每张表设置一个id

表里设置一个id作为主键,最好是int类型,并加上自增标识。使用varchar当做主键会使性能下降。

 

数据库结构优化

1.将字段很多的表分解为多个表

对于字段很多的表,如果有些字段使用的频率很低,可以将这些字段分离出来形成新表。因为一个表数据量很大时,会由于使用频率低的字段存在而变慢,通过分解字段,可以提高表的查询效率。

2.增加中间表

对于需要经常联合查询的表,可以建立中间表以提高查询的效率。把经常要联合查询的数据插入到中间表,然后将原来联合查询改为对中间表的查询,以此来提高表的查询效率。

3.优化插入记录的速度

影响插入速度主要是索引、唯一性校验、一次插入的条数。以InnoDB表为例。

(1)禁止唯一性检查

插入数据时,mysql会对插入的记录。唯一性校验会降低插入记录的速度。等记录插入完毕后再开启。

SET UNIQUE_CHECKS = 0;开启
SET UNIQUE_CHECKS = 1;关闭

(2)禁止外键检查

插入数据之前禁止对外键的检查,数据插入后再恢复对外键的检查。

SET foreign_key_checks = 0;
SET foreign_key_checks = 1;

(3)禁止自动提交

插入数据之前禁止事务的自动提交,数据导入后再恢复。

SET autocommit = 0;
SET autocommit = 1;

 

数据库优化

1.优化表的结构,对常用字段和非常用的字段分开存储。

2.优化sql合理使用索引。

3.做数据库读写分离,减少io压力。因为数据库对记录做持久化并存储在磁盘上,对磁盘的io是非常消耗性能的操作,因此,读写在一个库中会大大增加io的压力。

4.尝试使用缓存,不要让数据都走数据库。

5.对业务做垂直拆分。

6.对表做水平拆分。

合理使用所以对性能提升至关重要。

如果索引建立在重复数据很少的字段上效果明显,对于重复数据量大的字段就不见得会提升效率。

对索引列使用函数会导致索引失效。技巧:对索引列不使用函数而对常数项使用函数,索引就有效了。

 

以上是关于mysql性能优化的主要内容,如果未能解决你的问题,请参考以下文章

优化片段着色器

从数据库代码和服务器对PHP网站Mysql做性能优化

MySQL 数据库 Schema 设计的性能优化①:高效的模型设计

MySql查询性能优化必知必会

优化 ResultSet 获取性能(Apache Spring、MySQL)

JavaScript性能优化5——JSBench工具的使用