用ChatGPT帮我进行SQL调优,sql 调优再也没有那么难了

这篇具有很好参考价值的文章主要介绍了用ChatGPT帮我进行SQL调优,sql 调优再也没有那么难了。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题背景

近期由于订单量激增,我们的 ERP 系统订单查询效率骤降! 查询半年内的 300万数据就要卡到 50多秒才能出结果(有时要一分多钟)。 而订单查询这块由于系统迭代原因,导致查询条件十分复杂, 索引也已经优化到了极限,不能再通过加索引解决问题。
实际业务中,相信很多人也都有 SQL 调优经验,这个问题也有大神能解决。 但是如今有了 ChatGPT,可以大大提升我们解决此类问题的效率,下面我给大家分享一下如何实操:

先看一下调整前的 sql

SELECT a.*, b.poId, d.orderId, d.problemReason, d.workOrderType
	, d.remark, d.afterSaleCost, d.cause, d.logisticsCosts, d.logisticsType
	, d.shipmentOA, d.otherFee, d.causeText, d.afterSaleDealCode, d.afterSaleDealName
	, bo.jyyOppCode AS jyyOppCode, bo.jyyOppName AS jyyOppName, bo.customerName AS customerName
FROM ordermaininfo a
	LEFT JOIN ordersubinfo b ON a.mainId = b.mainId
	LEFT JOIN bizoppinfo bo ON bo.busOppCode = a.busOppCode
		AND bo.validStatus = '1'
	LEFT JOIN orderaftersalesinfo d ON a.id = d.orderId
WHERE 1 = 1
	AND a.orderCreateDate BETWEEN '2022-12-20 00:00:00' AND '2023-04-27 23:59:59'
	AND a.returnOrderFlag = '0'
	AND a.isToKthree NOT IN ('5', '10')
	AND a.submitFlag = '1'
	AND a.validStatus = '1'
GROUP BY a.mainId
ORDER BY a.customOrderId ASC, a.mainId ASC, a.orderCreateDate desc;

功能说明

- customOrderId、mainId、orderCreateDate 都是索引字段
- 排序规则是业务需求,要支持分页,所以排序要保留
- 当orderCreateDate查询范围在一个月以内时,效率比较好,索引也可用,但查询范围一扩大,就会出现  1/5 基数量索引失效问题
- `先看下此时的执行计划,订单主表进行了全表扫描,sql 执行时间大约 1分钟`

用ChatGPT帮我进行SQL调优,sql 调优再也没有那么难了

问题分析

通过 sql 诊断发现,表达式ORDER BY a.customOrderId ASC, a.mainId ASC, a.orderCreateDate DESC对多个不同条件使用不同方向的排序,将导致无法使用索引。 这是最核心问题。
用ChatGPT帮我进行SQL调优,sql 调优再也没有那么难了

通过 ChatGPT 优化此 SQL(sql 调优再也没有那么难了)

准备一下,如何向 gpt 发出提问

根据前面的分析,表达式ORDER BY a.customOrderId ASC, a.mainId ASC, a.orderCreateDate DESC对多个不同条件使用不同方向的排序,将导致无法使用索引。所以,这将是我们问题的突破口!

稍后提问,我们将采取如下策略:

  1. 给 ChatGPT 设定角色:DB、sql 调优专家
  2. 描述出我们的问题,把问题突破口告知它
  3. 提供出我们的 sql 语句

第一次提问(没解决问题,但是一定要看,并不是 GPT 的错)

(注意:这里我着急,就没有分开设定角色提问,而是一次性提问了,大家可以分开聊天提问也是可以的)

  • 开始提问
    用ChatGPT帮我进行SQL调优,sql 调优再也没有那么难了
  • GPT 给出的办法如下
    从解决方案来看,其实人家说的一点问题没有,问题原因在于我前面提问的时候,没有告诉他,我已经有索引了,并且不能再创建索引了。 所以这次回答虽然没有解决我实际的问题,但是GPT回答问题本身是正确的。 我们也知道了,如何更加准确的提问。
    用ChatGPT帮我进行SQL调优,sql 调优再也没有那么难了

第二次提问(成功解决)

吸取前面的教训,我把索引情况告知 GPT后,它给出了新的回答。 但我还是犯了一个马虎,就是索引没提供全,gpt 还是给出了索引建议。不过无所谓,因为它很聪明,回答的第三点,实际上解决了我的最终问题。而且他给出了完整 sql ,我直接拿这个 sql 实验了一下, 效率提升 将近 8 倍

调整前:500 rows retrieved starting from 1 in 1 m 13 s 524 ms
调整后:500 rows retrieved starting from 1 in 8 s 899 ms

虽然,8s 也很慢,但是这是我测试的系统使用极限,实际业务应用中,不会出现这种低效的 sql 组合。 按此优化后,真实使用中,最慢的 2-3s 也出结果了(不要较真,对于这类系统,订单查询这个效率,已经很高了,以前小编的其他项目中,也有要求 200ms 返回结果)
用ChatGPT帮我进行SQL调优,sql 调优再也没有那么难了

写在最后

人工智能的浪潮已经来袭,这次是 AI 2.0 的时代,抓住先机,你就赢了一半了。 3月份我也没太关注,以为它不会掀起什么大浪,就像元宇宙一样,离我们还很远。 但是这次真的不一样,ChatGPT 3.5+ 的来临,很多事情都发生了变化。因为我本身是程序员,我使用最多的就是让他帮我写代码,调 sql 等。而且它写的真的很好,我一个 java8年的程序员,质量跟他都没法比,而且它写的是真快,质量真高!

同时,我近期已经实现的 微信公众号对接 ChatGPT的 python 代码基本上都是用 ChatGPT 写出来的开发了三天就在公众号上实现了与 ChatGPT 实时聊天,两天时间公众号分析增加了 230 人。 在大家的试用之下,公众号 ChatGPT 聊天功能现在已经趋于完美。虽然还有优化空间,但是对于个人而言,两三天做到这个效果着实不容易了。

感兴趣的小伙伴,欢迎一起探讨,想体验的也可以过来体验一下,真正的免费开放。
公众号:javastarboy (注意,我微信与公众号都叫 javastarboy ,大家不要进错哦~)文章来源地址https://www.toymoban.com/news/detail-455900.html

到了这里,关于用ChatGPT帮我进行SQL调优,sql 调优再也没有那么难了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记一次简单的SQL调优

    相信大家对后端数据库的 SQL 都不会陌生,但是有时候我们会 无意间 就写出一堆奇怪的SQL, 可能当时还没有发现 ,但是没关系,客户后期会告诉你的,这也没有关系, 只要后期不是你负责解决bug就好 。 可是很不幸有时候这种问题就是分配给你解决 。。。。。。 下面就是我

    2024年02月09日
    浏览(44)
  • spark sql 的join调优

    spark sql中join操作是最耗费性能的操作,因为这涉及到数据的shuffle操作,如果由此导致数据倾斜更是会雪上加霜,那么如何优化join操作的性能呢? 方式一 broadcast广播: 如果是大表和小表的join操作,最简单的解决方式就是对小表进行broadcast操作,把小表的数据广播到各个ex

    2024年02月21日
    浏览(45)
  • SQL调优的几个方法

    1.为什么调优,好处是什么?  SQL语句在编写之后,对于数据量较少的表基本没有什么性能上的需求,但是如果考虑到性能方面的话,SQL语句优化就是必须的。 2.如何调优?调有点方法有哪些?   1、对查询进行优化,应尽量避免全表扫描,首先考虑在where及order by上建立索引

    2024年02月16日
    浏览(40)
  • 最佳实践分享:SQL性能调优

    SQL性能调优是一个需要不断探索和实践的过程,旨在确保数据库查询的高效运行。本文将分享一些SQL性能调优的最佳实践,帮助您提升数据库性能,减少查询响应时间。 一、索引优化 索引是提高查询性能的关键。以下是一些关于索引优化的建议: 1.为经常用于查询条件的列

    2024年01月16日
    浏览(38)
  • MySQL 中的 SQL 查询性能调优

            通过 MySQL 中的索引加速 SQL 查询。安装、分析查询并使用存储过程以获得最佳结果。         在本文中,我们将了解索引表列如何帮助提高 SQL 查询的快速响应时间。我们将介绍安装 MySQL、创建存储过程、分析查询以及了解索引的影响的步骤。         我在

    2024年02月12日
    浏览(43)
  • spark SQL 任务参数调优1

    要了解spark参数调优,首先需要清楚一部分背景资料Spark SQL的执行原理,方便理解各种参数对任务的具体影响。 一条SQL语句生成执行引擎可识别的程序,解析(Parser)、优化(Optimizer)、执行(Execution) 三大过程。其中Spark SQL 解析和优化如下图 Parser模块:未解析的逻辑计划

    2024年02月07日
    浏览(36)
  • flink sql checkpoint 调优配置

    - `execution.checkpointing.interval`: 检查点之间的时间间隔(以毫秒为单位)。在此间隔内,系统将生成新的检查点 SET execution.checkpointing.interval = 6000; - `execution.checkpointing.tolerable-failed-checkpoints`: 允许的连续失败检查点的最大数量。如果连续失败的检查点数量超过此值,作业将失败

    2024年02月12日
    浏览(42)
  • MySQL调优笔记——慢SQL优化记录(1)

    上周,项目出现线上问题,在这家公司做的是一个SAAS平台,总用户量大约10万人; 经过排查,发现是SQL问题,导致数据库响应慢,进而拖垮了整体服务; 通常,查询耗时较长的SQL涉及到的一些常见原因包括但不限于:数据量过大,查询未使用索引等 于是我们组开始全面摸牌

    2023年04月24日
    浏览(70)
  • oracle sql调优之绑定变量用法举例

    Oracle 绑定变量是一种在 SQL 语句中使用变量的方法,它可以提高 SQL 语句的执行效率、简化编程过程,并且可以防止 SQL 注入攻击。 绑定变量的作用是将变量的值与 SQL 语句分离开来,避免在每次执行 SQL 语句时都需要重新解析和编译 SQL 语句,从而提高 SQL 语句的执行效率。在

    2024年02月15日
    浏览(46)
  • SQL进阶理论篇(一):数据库的调优

    本节主要分为以下三方面内容: 数据库调优的目标是什么? 如果要进行调优,都有哪些维度可以选择? 如何思考和分析数据库调优? 只是简单介绍了一些基础理论,之后有时间的话再针对性扩展吧。 简单来说,就是让相应的时间更快,吞吐量更大。 那怎么断定我这次调优是

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包