推理模型对SQL理解能力的评测:DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet

news2025/3/13 2:58:56

引言

随着大型语言模型(LLMs)在技术领域的应用日益广泛,评估这些模型在特定技术任务上的能力变得越来越重要。本研究聚焦于四款领先的推理模型——DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet在SQL理解与分析方面的能力,特别是它们判断SQL查询等价性的表现。

评测方法

我们设计了一个具有挑战性的测试案例[注1]:使用TPC-H基准测试中的一个原始SQL查询,以及通过专业SQL优化工具PawSQL重写后的查询版本。这两个查询在语法结构上有明显差异,但在语义上是等价的。我们要求四个模型分析这两个查询是否等价,并评估它们的推理过程和结论。

测试查询

原始SQL查询

select ps.ps_partkey, 
     sum(ps.ps_supplycost * ps.ps_availqty) as value
from partsupp as ps, supplier, nation
where ps.ps_suppkey = supplier.s_suppkey
     and supplier.s_nationkey = nation.n_nationkey
     and nation.n_name = 'JAPAN'
group by ps.ps_partkey
having sum(ps.ps_supplycost * ps.ps_availqty)
     > (select sum(ps_supplycost * ps_availqty) * 0.0001
        from partsupp, supplier, nation
        where ps_partkey = ps.ps_partkey
            and ps_suppkey = s_suppkey
            and s_nationkey = n_nationkey
            and n_name = 'JAPAN')
order by value desc

重写优化后的SQL查询:标量子查询解关联

select ps.ps_partkey, 
    sum(ps.ps_supplycost * ps.ps_availqty) as value
from partsupp as ps, supplier, nation , (
    select ps_partkey, sum(ps_supplycost * ps_availqty) * 0.0001 as null_
    from partsupp, supplier, nation
    where ps_suppkey = s_suppkey
      and s_nationkey = n_nationkey
      and n_name = 'JAPAN'
    group by ps_partkey) as SQ
where ps.ps_suppkey = s_suppkey
  and s_nationkey = n_nationkey
  and n_name = 'JAPAN'
  and SQ.ps_partkey = ps.ps_partkey
group by ps.ps_partkey
having sum(ps.ps_supplycost * ps.ps_availqty) > sum(SQ.null_)
order by value desc

模型分析结果

DeepSeek r1(推理用时59秒)

DeepSeek r1推理用时约59秒,正确判断两个查询在逻辑上等价的。

图片

它的分析重点包括:

  1. 查询逻辑对比:区分了第一个查询使用关联子查询与第二个查询使用内联视图预计算的不同实现方式。

  2. 等价性验证:详细分析了子查询作用域、计算值一致性和过滤条件,指出第二个查询中的sum(SQ.null_)实际上等价于直接取SQ.null_,因为每个ps_partkeySQ中唯一。

  3. 性能差异:识别出第二个查询通过预计算和连接优化避免了多次扫描,执行效率可能更高。PawSQL的优化结果也确实证明整体性能从192秒降低到0.065s,性能提升超过1000倍[1]。

    GPT-4o(推理时间26秒)

    GPT-4o推理用时26秒,同样得出了两个查询等价的正确结论。

    图片

    它的分析主要关注:

    1. 子查询的写法差异:识别出第一个SQL使用相关子查询,而第二个SQL将计算逻辑放到内联子查询中。

    2. 执行方式差异:指出尽管执行计划有所不同,但两个查询的语义和最终结果相同。

    GPT-4o的分析简洁明了,直接抓住了查询优化的本质:通过提前计算派生表的聚合值以提高性能,同时保持结果一致性。

    Kimi k1.5(用时1分钟8秒)

    Kimi k1.5推理用时1分钟8秒,而且错误地认为两个查询不完全等价。

    图片

    其重点分析包括:

    1. 子查询位置和逻辑:认为两个查询在子查询位置和处理逻辑上存在差异。

    2. 分组和筛选逻辑:误解了第一个查询是全局计算一个单一阈值,而第二个查询按ps_partkey分组计算独立阈值。

    3. 结果差异:基于上述误解,得出两个查询可能返回不同结果的错误结论。

    Kimi的分析反映出它在理解SQL查询语义,特别是子查询与主查询关系方面的局限性。

    Claude 3.7 Sonnet

    Claude 3.7 Sonnet也得出了查询不等价的错误结论。

    图片

    它的分析关注点包括:

    1. 子查询处理方式:正确识别出两个查询在子查询实现上的差异。

    2. HAVING子句条件比较:误认为第二个查询中的sum(SQ.null_)会对派生表结果再次聚合,改变比较语义。

    3. 修改建议:提出将第二个查询的HAVING条件修改为直接使用SQ.null_而非sum(SQ.null_)

    Claude的分析显示了对SQL聚合函数在不同上下文中行为理解的不足。

    评测结论

    1. DeepSeek r1和GPT-4o展示了较强的SQL语义理解能力,不仅给出了正确结论,还能准确解释优化过程中的语义保持。

    2. Kimi k1.5和Claude 3.7 Sonnet在处理复杂SQL转换和子查询优化时存在明显局限,尤其是在理解聚合函数与JOIN操作的交互方面有待提高。

    3. 模型表现差异可能反映了训练数据中SQL相关内容的质量和数量差异,以及模型对数据库查询执行机制的理解深度不同。

    启示

    尽管大型语言模型在SQL理解和分析方面取得了显著进展,本研究结果也凸显了专业SQL优化工具(如PawSQL)在实际数据库优化工作中的不可替代性。

    1. 优化精确性与可靠性:专业工具基于数据库理论和实践,确保查询转换的语义等价性,而LLMs在复杂SQL查询的理解上仍存在不确定性。

    2. 性能优化的系统性与全面性:专业工具可以基于数据库引擎特性和统计信息进行优化,考虑索引使用、连接顺序、谓词下推等多维度优化,生成可预测的、一致的优化结果。

    3. 生产环境中的稳定性与可控性:在生产环境中,SQL查询优化需要考虑优化的可预测性和一致性、与现有应用系统的兼容性以及对边缘情况的稳健处理。专业工具在这些方面提供了更高的可靠性和可控性。

    4. 工具协同: 构建LLMs与专业SQL优化工具协同工作的方法,可能是提高数据库优化效率和可靠性的有效途径。

    总结

    通过SQL等价性分析任务,揭示了当前顶级推理模型在处理专业技术领域问题时的能力差异。尽管部分模型展现了对SQL语义理解的能力,但专业SQL优化工具在实际生产环境中的价值仍不可替代。随着技术发展,LLMs与专业工具的结合使用可能成为未来数据库优化的最佳实践。

    [*注1] 本文使用的优化案例:

    https://www.pawsql.com/statement/1897947325217640449

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314051.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    [动手学习深度学习]12.权重衰退

    1.介绍 权重衰退是常见的处理过拟合的方法 控制模型容量方法 把模型控制的比较小,即里面参数比较少使参数选择范围小 约束就是正则项 每个特征的权重都大会导致模型复杂,从而导致过拟合。 控制权重矩阵范数可以使得减少一些特征的权重,甚至…

    JavaEE_多线程(二)

    目录 1. 线程的状态2. 线程安全2.1 线程不安全问题的原因 3. 线程安全中的部分概念3.1 原子性3.2 可见性3.3 指令重排序 4. 解决线程安全问题4.1 synchronized关键字4.1.1 可重入4.1.2 synchronized使用 4.2 volatile关键字4.2.1 volatile使用 5. wait和notify5.1 wait()方法5.…

    【unity小技巧】分享vscode如何进行unity开发,且如何开启unity断点调试模式,并进行unity断点调试(2025年最新的方法,实测有效)

    文章目录 前言一、前置条件1、已安装Visual Studio Code,并且unity首选项>外部工具>外部脚本编辑器选择为Visual Studio Code [版本号],2、在Visual Studio Code扩展中搜索Unity,并安装3、同时注意这个插件下面的描述,需要根…

    【Hadoop】详解HDFS

    Hadoop 分布式文件系统(HDFS)被设计成适合运行在通用硬件上的分布式文件系统,它是一个高度容错性的系统,适合部署在廉价的机器上,能够提供高吞吐量的数据访问,非常适合大规模数据集上的应用。为了做到可靠性,HDFS创建了…

    Spring(4)——响应相关

    一、返回静态页面 1.1**RestController和Controller** 想返回如下页面: 如果我们依旧使用原来的**RestController** 可以看到的是仅仅返回了字符串。 此时将**RestController改为Controller** 可以看到这次返回的是html页面。 那么**RestController和Controller…

    axure11安装教程包含下载、安装、汉化、授权(附安装包)图文详细教程

    文章目录 前言一、axure11安装包下载二、axure11安装教程1.启动安装程序2.安装向导界面3.安装协议协议页面2.选择安装位置3.开始安装4.完成安装 三、axure11汉化教程1.axure11汉化包2.axure11汉化设置 四、axure11授权教程1.打开axure112.设置使用方式3.输入许可证号4.axure11安…

    Redis-缓存穿透击穿雪崩

    1. 穿透问题 缓存穿透问题就是查询不存在的数据。在缓存穿透中,先查缓存,缓存没有数据,就会请求到数据库上,导致数据库压力剧增。 解决方法: 给不存在的key加上空值,防止每次都会请求到数据库。布隆过滤器…

    Windows server网络安全

    摘要 安全策略 IP安全策略,简单的来说就是可以通过做相应的策略来达到放行、阻止相关的端口;放行、阻止相关的IP,如何做安全策略,小编为大家详细的写了相关的步骤: 解说步骤: 阻止所有: 打…

    Python从入门到精通1:FastAPI

    引言 在现代 Web 开发中,API 是前后端分离架构的核心。FastAPI 凭借其高性能、简洁的语法和自动文档生成功能,成为 Python 开发者的首选框架。本文将从零开始,详细讲解 FastAPI 的核心概念、安装配置、路由设计、请求处理以及实际应用案例&a…

    Leetcode做题记录----2

    1、两数之和 思路: 1、不能使用相同元素,可以想到哈希表,,C#中可以通过字典建立当前值和下标的关系 2、显然,依次判断数组中的每个数即可 3、定义other target - num[ i ] 这个other就是我们用于在字典中进行寻找…

    批量合并 Word 文档,支持合并成一个 Word,也支持按文件夹合并

    我们经常会碰到需要将多个 Word 文档批量合并成一个 Word 文档的场景,比如需要合并后打印、合并后方便整理存档等等。如果是人工的操作,会非常的麻烦。因此我们通常会借助一些批量处理脚本或者寻找批量处理的工具来帮我们实现批量合并 Word 文档的操作。…

    项目实操分享:一个基于 Flask 的音乐生成系统,能够根据用户指定的参数自动生成 MIDI 音乐并转换为音频文件

    在线体验音乐创作:AI Music Creator - AI Music Creator 体验者账号密码admin/admin123 系统架构 1.1 核心组件 MusicGenerator 类 负责音乐生成的核心逻辑 包含 MIDI 生成和音频转换功能 管理音乐参数和音轨生成 FluidSynth 集成 用于 MIDI 到音频的转换 …

    神经网络为什么要用 ReLU 增加非线性?

    在神经网络中使用 ReLU(Rectified Linear Unit) 作为激活函数的主要目的是引入非线性,这是神经网络能够学习复杂模式和解决非线性问题的关键。 1. 为什么需要非线性? 1.1 线性模型的局限性 如果神经网络只使用线性激活函数&…

    动态规划详解(二):从暴力递归到动态规划的完整优化之路

    目录 一、什么是动态规划?—— 从人类直觉到算法思维 二、暴力递归:最直观的问题分解方式 1. 示例:斐波那契数列 2. 递归树分析(以n5为例) 3. 问题暴露 三、第一次优化:记忆化搜索(Memoiza…

    ubuntu下在pycharm中配置已有的虚拟环境

    作者使用的ubuntu系统位于PC机上的虚拟机。系统版本为: 在配置pycharm解释器之前你需要先创建虚拟环境以及安装pycharm。 作者创建的虚拟环境位于/home/topeet/miniconda3/envs/airproject/,如下图所示: 作者安装的pycharm版本为2023社区…

    爬虫中一些有用的用法

    文本和标签在一个级别下 如果文本和a标签在一个级别下 比如: # 获取a标签后的第一个文本节点text_node a.xpath(following-sibling::text()[1])[0].strip() 将xpath的html代码转换成字符串 etree.tostring(root, pretty_printTrue, encoding"utf-8")…

    DeepIn Wps 字体缺失问题

    系统缺失字体 Symbol 、Wingdings 、Wingdings2、Wingdings3、MT—extra 字体问题 问了下DeepSeek 在应用商店安装或者在windows 里面找 装了一个GB-18030 还是不行 在windows里面复制了缺失的字体 将字体复制到DeepIn 的字体目录(Ubuntu 应该也是这个目录&am…

    【webrtc debug tools】 rtc_event_log_to_text

    一、rtc_event_log 简介 在学习分析webrtc的过程中,发现其内部提供了一个实时数据捕获接口RtcEventLog。通过该接口可以实时捕获进出webrtc的RTP报文头数据、音视频配置参数、webrtc的探测数据等。其内容实现可参考RtcEventLogImpl类的定义。其文件所在路径 loggin…

    数字IC后端项目典型问题(2025.03.10数字后端项目问题记录)

    小编发现今天广大学员发过来的问题都比较好,立即一顿输出分享给大家(每天都有好多种类的数字后端问题)。后续可能会经常通过这种方式来做分享。其实很多问题都是实际后端项目中经常遇到的典型问题。希望通过这种方式的分享能够帮助到更多需要…

    Redis 持久化详解:RDB 与 AOF 的机制、配置与最佳实践

    目录 引言 1. Redis 持久化概述 1.1 为什么需要持久化? 1.2 Redis 持久化的两种方式 2. RDB 持久化 2.1 RDB 的工作原理 RDB 的触发条件 2.2 RDB 的配置 2.3 RDB 的优缺点 优点 缺点 3. AOF 持久化 3.1 AOF 的工作原理 AOF 的触发条件 3.2 AOF 的配置…