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、使用负载均衡机制