当前位置: 首页 > news >正文

SQL 调优最佳实践笔记

定义与重要性

  • SQL 调优:提高SQL性能,减少查询时间和资源消耗。
  • 目标:减少查询时间和扫描的数据行数。

基本原则

  1. 减少扫描行数:只扫描所需数据。
  2. 使用合适索引:确保WHERE条件命中最优索引。
  3. 合适的Join类型:根据表的大小和关联性选择。
  4. 选择合适的数据库:根据业务类型选择OLTP或OLAP。

DQL最佳实践(SELECT)

  • 避免多表JOIN,尤其是大数据量情况下。
  • 避免全表扫描,使用索引优化查询。
索引使用
  1. 全表扫描问题:无索引或索引不合适。
  2. 索引创建:如CREATE INDEX idx_title ON books (title);
  3. 覆盖索引:包含查询所需所有列,减少回表查询。
  4. 主键点查:使用主键索引快速查询特定数据。

避免不必要的信息

  • 使用具体的列名代替SELECT *
  • 根据业务需求返回必要的列。

DML最佳实践(INSERT、UPDATE、DELETE)

  • 批量操作:使用单个SQL操作多行数据。
  • 删除数据
    • 使用WHERE条件指定删除范围。
    • 避免大批量删除,使用循环或限制条件。
    • 使用TRUNCATE代替DELETE清空表数据。

索引最佳实践

  1. 创建索引
    • 及时删除不需要的索引。
    • 考虑查询能否使用覆盖索引。
    • 选择过滤性好的列创建索引。
    • 组合索引时,将等值条件列放在前面。
  2. 使用索引
    • 确保索引在查询中被使用。
    • 遵循左前缀规则。
    • 避免使用!=NOT INLIKE '%...'等降低索引效率的条件。

总结

  • SQL调优是一个全面的优化过程,包括查询类SQL、索引优化等。
  • 针对不同的业务场景和数据库特性,采取相应的优化策略。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring + Boot + Cloud + JDK8 + Elasticsearch 单节点 模式下实现全文检索高亮-分页显示 快速入门案例
  • Spring Boot项目热部署
  • Git克隆仓库太大导致拉不下来的解决方法 fatal: fetch-pack: invalid index-pack output
  • 凤凰花:绚烂花语与独特魅力
  • Google Ads广告为Demand Gen推出生成式AI工具,可自动生成广告图片
  • python 异常处理详解带(3分钟速通)
  • 笔记本电脑无线网卡突然没有了
  • LeetCode 3133.数组最后一个元素的最小值:位运算+双指针
  • 更换域名后图片不显示
  • C++设计模式1:单例模式(懒汉模式和饿汉模式,以及多线程问题处理)
  • SD-WAN安全:在灵活性与安全性之间找到平衡
  • vue使用v-html保留原内容的缩进和换行
  • HTML静态网页成品作业(HTML+CSS)——家乡广州介绍设计制作(5个页面)
  • 23.合并K个升序链表-----力扣
  • 多元统计分析——基于R语言的单车使用情况可视化分析
  • [PHP内核探索]PHP中的哈希表
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Android Volley源码解析
  • download使用浅析
  • extract-text-webpack-plugin用法
  • HTML中设置input等文本框为不可操作
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • mockjs让前端开发独立于后端
  • MYSQL 的 IF 函数
  • PermissionScope Swift4 兼容问题
  • Quartz初级教程
  • SQLServer之创建显式事务
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Unix命令
  • 成为一名优秀的Developer的书单
  • 动态魔术使用DBMS_SQL
  • 高程读书笔记 第六章 面向对象程序设计
  • 开源地图数据可视化库——mapnik
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 移动端解决方案学习记录
  • 由插件封装引出的一丢丢思考
  • 白色的风信子
  • ​​​​​​​​​​​​​​Γ函数
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (C语言)共用体union的用法举例
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (论文阅读30/100)Convolutional Pose Machines
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十七)Flink 容错机制
  • (四)模仿学习-完成后台管理页面查询
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .Net MVC4 上传大文件,并保存表单