慢SQL优化

1、慢查询统计

show VARIABLES like '%que%'

SET GLOBAL slow_query_log = on; //开启慢sql统计开关

SET GLOBAL long_query_time = 1; //设置超过1秒则 认为是慢sql , 注意此处设置完之后需要重新链接客户端 才可以查看到设置成功

2、优化

索引优化

通过执行计划,查看是否走到索引

(1)索引是否有区分度

(2)是否忽略左匹配原则

(3)采用前缀模糊查询等坏语句

(4)没有做类型转换,导致未走到索引,比如使用$

(5)使用了不等号

(6)大量子查询(多用join,避免临时表)

(7)在where子句中使用表达式操作、函数操作等

SQL语句优化

(1)避免使用select*,不要返回不必要的字段,增加索引覆盖的概率

(2)尽量减少子查询(子查询会创建临时表,查询完毕删除临时表)

(3)调整where子句的连接顺序,将过滤数据多的条件放在前面,最快速度缩小结果集

(4)尽量减少联表查询,联表查询是笛卡尔乘积的形式,检索的数据几何倍上升

(5)一次查询的结果最好不要过大,可以使用分页查询

表设计优化

(1)大数据量分库分表

(2)数据避免倾斜

(3)单表的字段最好不要超过20个。如果是比较大的表,有的字段使用的多,有的字段使用比较少,使用频率比较少的会拖慢查询速度

(4)列类型的选择是否合适(能用int却用了bigint等)

3、索引Type详解

MySQL Explain命令详解:type列详解及案例分析 - 知乎

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLSQL优化是指当数据库查询执行时间过长,影响系统性能时,对查询语句进行分析和调整的过程,以提高查询效率。以下是一些常见的优化策略: 1. **使用EXPLAIN分析**:使用`EXPLAIN`关键字可以查看SQL执行计划,了解哪些部分导致了查询变,例如索引使用情况、是否全表扫描等。 2. **优化查询语句**: - **避免全表扫描**:尽可能利用索引来减少数据扫描,如确保索引覆盖查询字段。 - **减少子查询**:尽量将复杂的子查询转换为JOIN操作,或使用临时表。 - **避免在WHERE子句中使用函数**:函数会破坏索引,应尽量在SELECT语句中处理。 3. **创建合适的索引**: - 针对频繁查询的列创建索引,尤其是作为WHERE条件的部分。 - 考虑复合索引(多个列组合)以匹配更复杂的查询。 4. **缓存机制**:启用`innodb_buffer_pool_size`来增大缓冲区,加快查询速度。也可以考虑使用`Query Cache`或者第三方缓存工具。 5. **优化表结构**: - 适当分区表,根据业务需求划分数据,减少单次查询的数据量。 - 减少冗余数据,避免存储不必要的重复数据。 6. **定期维护**: - 定期重建或优化索引,如使用`ALTER TABLE ... ANALYZE`。 - 清理无用的数据,保持数据表的整洁。 7. **服务器配置优化**: - 调整`max_connections`以适应并发需求。 - 调整`innodb_flush_log_at_trx_commit`以平衡写入速度和数据安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值