mysql 基础优化步骤

本文提供了一套从开启慢查询日志、分析慢查询、优化SQL执行计划、调整数据库配置等多个方面,全面优化MySQL慢查询性能的方法。通过设置慢查询日志、使用explain语句分析执行计划、调整索引使用策略、优化数据库配置等步骤,提升数据库性能,减少资源浪费。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 以root用户登入mysql,执行如下语句开启慢查询日志:
set global slow_query_log=1;
set long_query_time=3; 

注: 以上设置为临时的,重启就没了,如果需要长期打开慢查询日志可以在配置
文件my.cnf中加入如下:
[mysqld]
--slow_query_log[={0|1}  //0为关闭,1为开启,默认为0
--long_query_time= n     //n为慢查询的标准时间,默认为10,这个参数建议不
再配置文件中设置而直接使用默认值, 然后根据实际需求在mysql客户端中使用
set long_query_time=m 来动态设置

2. 开启测试程序, 在进行完第一步之后,需要把之前的应用到mysql的连接重连
下,以使设置对新会话生效。

3. 执行完业务之后,查看慢查询日志:
a. 如果不知道慢查询日志的位置,在mysql命令行客户端执行如下命令:
    show variables like "�tadir%";
    可以查看到当前mysql的数据目录。
    进入该目录,文件名末尾是slow.log的文件就是慢查询日志文件
b. 然后在shell中执行如下命令
    mysqldumpslow -s c -r 10 慢查询日志文件
    //上面这个命令可以把出现次数最多的10种类型的慢查询显示出来,如果想更
多可以把10调大。
    如果想以其他方式进行排序,可以参考帮助文档: mysqldumpslow --help

4. 得到执行效率有问题的sql语句之后,
a. 使用explain语句查看执行计划,
   如果是select语句直接  explain select....
                                
   如果是带where条件的update delete语句,
          将update和delete替换为select * from XXX where....

b. 看explain语句返回的查询计划中索引使用情况
       . 是否该语句有使用索引
       . 该语句是否使用了期望的索引

c. 根据explain分析的结果调整应用对索引使用或调整表的索引
       . 如果使用联合索引, index(c1,c2,c3), 应用的sql语句中应使用索引c1
或c1,c2 或c1,c2,c3来使用该索引。   (sql语句中使用c1,c3或c2,c3是不会使用
该索引的)
       . 尽量避免在主键中包含大字段,如一个 varchar(100)之类的,因为这非
常的消耗内存, 可以考虑用一个自增的int id作为主键,然后把需要的打字段设
为索引
       . 应用程序的sql语句要尽量避免对主键的修改
       . 对于ndb或memroy引擎的表来说,如果索引的使用基本都是按照a=b的模
式的话,可以只使用hash索引
      
       . 如果应用对于数据库的操作是写多读少的话,关闭query cache:
            set global query_cache_size=0; //这个为临时,重启失效
            活在配置文件中
            [mysqld]
              --query_cache_size=0               //这个是永久的
       . 避免建过多的索引,这样非常影响修改的性能
       . 如果一个索引可以确定非空,那么在声明的时候加上not null
       . 如果可以确定索引唯一的话,那么声明为unique
       . 对于比较大的字段可以考虑使用前缀索引,即只所以该字段的前面几个
字节
         如 a varchar(50),   index (a(10)).
         这样可以节省内存,但会降低索引的唯一性。
       . 如果表中的索引主要用于 等值比较 即使用“=”进行条件判断的话 并且是唯一的话 即unique,那么可以只使
         用hash索引:
         例如
          create table t1 (a int primary key, b char(10) not null,
          unique (b) using hash) engine = ndbcluster
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值