mysql 查询性能优化

时间:2022-01-15 07:00:57

一、mysql性能分析方法

1. 通过mysql慢查询日志定位到速度慢的sql

--- 查看mysql是否启用慢查询日志 
show VARIABLES LIKE 'log_slow_queries'
等价于SELECT @@log_slow_queries
--- 查看慢于多少秒的sql会记录到慢日志中
show VARIABLES LIKE 'long_query_time'
等价于SELECT @@long_query_time

慢日志配置及路径:

#通过mysql配置文件my.cnf,可以修改慢日志的相关配置
vim /etc/my.cnf
slow_query_log # 开启慢日志,注释后就关闭慢日志
long_query_time = 1 #慢于多少秒的sql会记录到日志文件中
slow_query_log_file=slow_mysql_query.log #慢日志路径,相对路径在mysql安装目录下。如当前配置对应的路径为:/var/lib/mysql/slow_mysql_query.log

2. 通过explain进行分析

二、mysql优化方法

  1. 合理使用索引
    (todo未完待续)
  2. 反范式设计
    范式设计要求在表的设计过程中尽量减少数据冗余,好处如下:
    • 冗余数据减少,将节约存储空间,并且保持关系的一致性。
    • 冗余数据的减少,当数据需要进行更新时,需要修改的数据也变少了,这样会提升更新操作速度。
    • 范式化的表通常更小,更好地利用表的查询缓存来提高查询速度。
  3. 使用查询缓存
    Mysql会将select查询的结果缓存在内存中,当下次有相同的查询时,直接将结果返回,而不进行索引遍历和磁盘数据读取操作,将提高查询的效率。


    #通过mysql配置文件my.cnf,可以修改mysql查询缓存的相关配置

    vim /etc/my.cnf
    query_cache_type = 1; # 1开启,0关闭。query_cache_type=1是给所有的查询做Cache
    query_cache_size = 16MB; #分配16MB内存用于mysql缓存
    query_cache_limit = 1 MB ; #指定单个查询能够使用的缓冲区大小
        # 查看缓存是否开启
    SELECT @@query_cache_type
    # 查看缓存总大小
    SELECT @@query_cache_size
    # 查看记录集缓存限制
    SELECT @@query_cache_limit
  4. 使用搜索引擎
    在分布式环境下,为了便于数据库扩展,提高并发处理能力,相关联表可能并不在同一个数据库中,而是分布在多个库中,并且表可能已经进行了切分,无法进行复杂的条件查询。这时候就需要搭建搜索引擎,将需要进行查询和展现的列通过一定的规则都建到索引当中,以提供复杂的跨表查询与分组操作。
  5. 使用key-value 数据库
    如Mongodb、redis等。
  6. GC优化(主要针对java应用)
    通过GC日志分析Minor GC的频率、FUll GC的频率、GC导致的停顿时间及GC发生的原因等。
  7. 硬件性能提升
    使用SSD、采用LVS或nginx负载均衡、网卡升级、CPU升级、内存升级等。