SQL优化

SQL优化

SQL的优化并不是一开始就进行优化的,而是需要先进行观察的,所以SQL优化的步骤应该是这样的

步骤

  • 定位优化对象的性能瓶颈

    首先要判断出这个Query的瓶颈到底是IO还是CPU,可以使用profiling功能来找到Query的瓶颈

  • 明确的优化目标

  • 慢查询的开启与捕获

  • explain+慢SQL分析

  • show profile查询SQL在MySQL服务器里的执行细节和生命周期情况

  • 进行MySQL的参数调整优化

优化原则

  • 减少数据扫描(减少磁盘访问)

    • 尽量在查询中加入一些可以提前过滤数据的条件,比如按照时间过滤数据等,可以减少数据的扫描量,对查询更友好;
    • 在扫描大表数据时是否可以命中索引,减少回表代价,避免全表扫描。
  • 返回更少数据(减少网络传输或磁盘访问)

    • 只取出自己需要的Columns。返回的数据需要通过网络数据包传回客户端,如果取出的Column越多,需要传输的数据量自然会越大
  • 减少交互次数(减少网络传输)

    • 将数据存放在更快的地方
    • 某条查询涉及到大表,无法进一步优化,如果返回的数据量不大且变化频率不高但访问频率很高,此时应该考虑将返回的数据放在应用端的缓存当中或者 Redis 这样的缓存当中,以提高存取速度。
  • 永远使用小结果集驱动大的结果集

    驱动结果集越大,所需要循环的次数就越多,那么被驱动表的访问次数自然也就越多

  • 仅仅使用最有效地过滤条件

  • 尽可能避免复杂的join和子查询

zhhll.icu/2021/数据库/关系...

本文由mdnice多平台发布

相关推荐
一只积极向上的小咸鱼27 分钟前
第一性原理思考:从拆解问题到用实验检验答案
数据库
这个DBA有点耶1 小时前
时序数据库InfluxDB高基数问题深度拆解:内存索引膨胀机制与OOM完整链路
数据库·架构·dba
加油yx1 小时前
MySQL数据类型
数据库·mysql
蓝胖的四次元口袋2 小时前
Redis知识梳理(1)
数据库·redis·缓存
夜雪一千2 小时前
MySQL 数据加密实战:从传输、存储到字段级加密,分清场景不踩坑
数据库·mysql
wefg12 小时前
【Redis】C++ 自定义客户端
数据库·redis·缓存
这个DBA有点耶3 小时前
为什么UPDATE比SELECT危险得多?锁范围等于扫描行数
数据库·架构·代码规范
天国梦3 小时前
国密门禁品牌怎么选?2026年最新3个避坑要点
运维·服务器·数据库·python
DB哥讲数据库3 小时前
【达梦数据库安装教程】超详细图文讲解-附达梦安装包
数据库·oracle
Hoxy.R4 小时前
【金仓数据库产品体验官】KingbaseES V9R2C16 坏块检测与修复完整测试流程
数据库