美文网首页
mysql 优化

mysql 优化

作者: xiaoer0128 | 来源:发表于2020-04-19 17:47 被阅读0次

    . show full processlist;查看所有连接的状态,有没有异常的状态

    一、SQL语句优化

     . 不要select * 
    
     . 谨慎使用模糊查询。只有 s% (%在后面)才走索引
    
     . 对order by 加索引
    
     . 少用IS NULL和IS NOT NULL 不走索引 可以使用>或者<代替
    
     . 少用!=运算符 可以使用>和< 代替
    
     . 少用OR; OR前面会使用索引,后面不会,可以使用UNION ALL来代替
            select * from temp where age=20 or age=30;不走索引,可以使用下面的代替
            select * from temp where age=20
             UNION ALL
            select * from temp where age=30
    
    . 少用 IN 和NOT IN
        select * from user where age in(20,30); 可以使用下面的代替
        select * from user where age= 20
        UNION ALL
        select * from user where age=20
    
    . 避免条件语句中的数据类型转换
      如果数据类型是整型,不要加引号
    
    . 在表达式左侧使用运算符和函数会是索引失效
    

    二、优化数据库参数

    1、 优化最大连接数 MAX_CONNECTIONS mysql 的最大并发连接数,默认151 最大上限 16284

    实际连接数是最大连接数的85%最为合适

      1 #查看设置的连接数
    show variables like '%max_connections%';
      SHOW VARIABLES LIKE 'MAX_USER_CONNECTIONS'; # 每个用户的连接数
      
    

    MySQL 为每个连接创建缓冲区,所以不能盲目的上调最大连接数

      max_connection=3000 #消耗大约800内存
    

    2、优化请求的堆栈

    back_log 是存放执行请求的堆栈大小,默认50;就是达到了最大连接数,有多少连接可以排队
    设置成最大连接数的20~30%比较好

    3、优化并发线程数

    innodb_thread_concurrency 并发线程数,默认是0;合理的应该是cpu核心数的2倍

    4、连接超时时间

    wait_timeout 超时时间,单位秒。默认是8小时,长期不用又不销毁,浪费资源
    wait_timeout =600 #10分钟

    5、修改InnoDB缓存大小

    innodb_buffer_pool_size是InnoDB的缓存容量,默认128M,设置成内存的70%-80%比较合适,如果还有其他服务比如Redis缓存,那么值要修改的小些

    三、利用慢查询日志

      show variables like 'slow_query%'; #查询慢查询是否开启以及位置
    
    打开配置文件,【mysqld】添加
    slow_query_log = ON 
    long_query_time = 1 #单位秒
    

    相关文章

      网友评论

          本文标题:mysql 优化

          本文链接:https://www.haomeiwen.com/subject/enwmbhtx.html