Mysql性能优化--MySQL优化

Posted Solarium

tags:

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

mysql 优化

一、使用索引进行优化

在mysql中,创建数据表后会生成数据文件,索引文件,后缀名为.MYI的文件就是索引文件。索引的原理就是通过空间换取时间,所以索引并不是建立的越多越好。

我们可以通过explain的结果来分析该查询语句是否使用了索引。通过查看type,extra和rows的结果是可以看出来的。

type的结果为all表示肯定没有使用索引;
extra的结果中如果是using index则表示使用了索引,如果extra的结果为空则表示没有使用索引。
rows的结果如果等于全表行数,则也表示索引没有被使用。

举例说明:
eg1、没有使用索引的结果:

在这里的结果中type是为all,表示进行的是全表扫描,rows的结果为7,涉及的行数为全表的行数;

eg2、使用了索引的结果:

创建了索引后,type的结果为ref,不再是all,表示至少使用了一个索引,rows中涉及的行数为1,而不是全表的行数;此时SQL语句的性能得到明显的提升;

二、Mysql server优化

2.1 innodb存储引擎内存进行优化;

innodb是用一块内存区做IO缓存池,该缓存池用来缓存innodb的索引块和缓存innodb的数据块;

Innodb_buffer_pool_size: 该变量决定了innodb存储引擎表数据和索引数据的最大缓存区大小,设置比较合理的话,能提高事务操作的效率;

Innodb_log_buffer_size: 该变量决定了innodb重做日志缓存的大小,对于可能产生大量更新记录的事务,增加Innodb_log_buffer_size的大小,可以避免innodb在事务提交前就执行不必要的日志写入磁盘操作。

2.2 修改并发相关的参数

A、调整max_connections,提高并发连接数;

B、调整thread_cache_size,加快连接数据库的速度,mysql会缓存一定数量的客户服务线程以备重用,通过thread_cache_size可控制mysql缓存客户服务线程的数量

C、innodb_lock_wait_timeout: 控制innodb事务等待行锁的时间,对于快速处理的sql语句,可以将行锁的等待超时时间调小,以避免事务长时间挂起,对于后台运行的批处理操作,可以让等待超时时间调大,以避免发生大的回滚操作;

三、应用程序优化

3.1、访问数据库时采用连接池
3.2、采用缓存减少对于mysql的访问
 A、避免对同一个数据库做重复检索
    在编写sql的时候,对同一个表尽可能 
 B、使用查询缓存
 C、缓存参数的配置
    Query_cache_type:是否打开缓存
    Query_cache_size: 缓存使用的内存空间大小
    Query_cache_min_res_unit: 分配内存块时的最小单位大小
    Query_cache_limit:mysql能够缓存的最大结果,如果超出,则增加qcache_not_cached的值,并删除查询结果;   
3.3、使用负载均衡机制

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

Mysql的性能优化

Mysql的性能优化

MYSQL性能优化分享(分库分表)

MySQL 性能优化

mysql 性能优化参数配置

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