我的SQL调优方法

本文详细阐述了SQL调优的核心步骤,并通过实际案例展示了如何在面对复杂查询时进行性能优化。包括发现慢查询、分析执行计划、合理建立索引、写出所有可能的查询SQL并实际测试等关键步骤。特别强调了在处理大数据记录表时,in查询方式往往能带来更好的性能提升。同时,文章提供了一个实例,说明通过深入理解存储过程和写出所有可能的SQL,可以显著提高系统性能。

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

3个关键点:

 

  • 执行计划
  • 索引
  • 查询中每步的查询集大小

 

 

我的SQL调优步骤:

 

1. 发现慢查询后,分析其执行计划

2. 合理建立索引,再次分析测试

3. 如果经过1、2依然对性能不满意,写出所有可能的查询SQL,分别按照1、2处理;

4. 根据1、2、3,使用实际数据,权衡后选择最佳的SQL

 

(红色标注的是关键,艺术在于平衡)

注意大数据记录的表查询,首要原则不一定是利用索引,往往从减少每步SQL查询结果集能得到更好地性能。

 

就我经历的几次系统调优中,就遇到了几个突破常理的:

案例:

    1页面数据显示需要大约8分钟才能出来;

    优化过程:分析页面慢的原因是一个SQL查询(多表、分组统计)太慢,通过分析执行计划看到确实全部使用了索引,老大说这个无法再优化了。

    我写出所有可能的SQL,然后一个个测试,最后使用了in的查询方式,测试结果大吃一惊,只需要不到300ms。从此后遇到sql性能问题时,我记住了这个原则——写出所有可能的查询SQL,实际测试

 

开发时需要注意的:实际数据才能检验你写的SQL真理,不要过早优化SQL,先尽量写最简单易读的SQL;

大数据记录的表往往in的查询方式性能更高,in时也要注意distinct和数据库的内部id(如oracle的rowid),往往可以得到意想不到的性能。

 

案例:

   1用户关键业务过程,每天需要执行一次、有新档案时也需要执行。利用1个存储过程扫描历史记录已决定是否需要初始化某些区域内的客户档案数据,执行耗时大约5分钟:

   优化过程:

1. 看懂存储过程:因为是外包做的,当时也没有文档,痛苦痛苦再痛苦,业务复杂,存储过程大约“不到”400行,那个难看阿,看懂后无非就是判断某些数据不存在,就初始化,如果已存在了,就根据条件修改某些值。

2. 写可能SQL:这已经是最简单可读的,要我写也只能写成这样。只好从性能调优入手,我把数据查询,大量使用子查询来减少每步的SQL结果集,最终存储过程代码近700行,可读性降低了,不过性能上去了,实测不到30s即可执行完毕。

 

实践才是检验的唯一标准,穷举自己所知道的,一个一个实地检测      

 

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在 IT 领域,文档格式转换是常见需求,尤其在处理多种文件类型时。本文将聚焦于利用 Java 技术栈,尤其是 Apache POI 和 iTextPDF 库,实现 doc、xls(涵盖 Excel 2003 及 Excel 2007+)以及 txt、图片等格式文件向 PDF 的转换,并实现在线浏览功能。 先从 Apache POI 说起,它是一个强大的 Java 库,专注于处理 Microsoft Office 格式文件,比如 doc 和 xls。Apache POI 提供了 HSSF 和 XSSF 两个 API,其中 HSSF 用于读写老版本的 BIFF8 格式(Excel 97-2003),XSSF 则针对新的 XML 格式(Excel 2007+)。这两个 API 均具备读取和写入工作表、单元格、公式、样式等功能。读取 Excel 文件时,可通过创建 HSSFWorkbook 或 XSSFWorkbook 对象来打开相应格式的文件,进而遍历工作簿中的每个 Sheet,获取行和列数据。写入 Excel 文件时,创建新的 Workbook 对象,添加 Sheet、Row 和 Cell,即可构建新 Excel 文件。 再看 iTextPDF,它是一个用于生成和修改 PDF 文档的 Java 库,拥有丰富的 API。创建 PDF 文档时,借助 Document 对象,可定义页面尺寸、边距等属性来定制 PDF 外观。添加内容方面,可使用 Paragraph、List、Table 等元素将文本、列表和表格加入 PDF,图片可通过 Image 类加载插入。iTextPDF 支持多种字体和样式,可设置文本颜色、大小、样式等。此外,iTextPDF 的 TextRenderer 类能将 HTML、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值