zoukankan      html  css  js  c++  java
  • 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、使用负载均衡机制
  • 相关阅读:
    JavaScript判断图片是否加载完成的三种方式 (转)
    支付宝异步通知notify_url接收不了问题解决(转)
    支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url
    Nginx Cache中$request_filename(转)
    win7下搭建nginx+php的开发环境(转)
    Nginx报出504 Gateway Timeout错误2
    BZOJ 3990 [SDOI 2015] 排序 解题报告
    BZOJ 3992 [SDOI 2015] 序列统计 解题报告
    BZOJ 3993 [SDOI 2015] 星际战争 解题报告
    BZOJ 3971 Матрёшка 解题报告
  • 原文地址:https://www.cnblogs.com/luoman/p/12692153.html
Copyright © 2011-2022 走看看