# SQL大模型优化指标体系与计算方法 ## 1. 文档目的 本文档用于建立SQL大模型优化方案的持续评估体系。 ## 2. 当前字段说明 | 列 | 字段 | 用途 | |---|---|---| | A | 时间 | SQL采集或分析批次 | | B | 条线名称 | 业务条线分析维度 | | C | 具体SQL | 原始SQL文本 | | D | checksum | SQL去重、版本关联 | | E | user_name | 数据库用户或系统标识 | | F | 最近捕捉时间 | SQL活跃时间 | | G | 平均耗时 | 原始运行表现 | | H | 最大耗时 | 原始运行峰值 | | I | 执行次数 | 工作负载权重 | | J | 锁耗时 | 锁等待影响 | | K | 原SQL执行时间(秒) | 性能测试基线 | | L | 原SQL是否可被优化 | 正式候选SQL判断字段 | | M | SQL审核平台优化方案 | 对比平台生成的方案 | | N | SQL审核平台优化后执行时间(秒) | 平台性能结果 | | O | 大模型优化详情 | 大模型生成的优化方案 | | P | 大模型优化后执行时间(秒) | 大模型方案性能结果 | | Q | 大模型优化后性能提升 | 建议由K、P自动计算 | | R | DBA人工复核(最终建议) | 专家审核结果 | | S | 开发是否认可大模型建议 | 开发主观认可结果 | | T | 是否修改 | 实际修改决策 | | U | 最终修改方案 | 实际实施内容 | | V | 不修改原因 | 未采纳原因 | | W | 备注 | 回归范围、风险及其他说明 | ### 2.1 重要口径说明 1. O列是“大模型方案”,P列是“大模型优化后执行时间”。因此: - O列不为空用于计算“模型方案覆盖率”; - P列为有效数字用于计算“模型性能验证覆盖率”。 2. M列是另一个SQL审核平台的优化方案,不完全等同于“可优化SQL”。 3. 正式的“可优化SQL”应使用清洗后的L列判断;在L列尚未规范前,可暂时使用M列不为空作为候选范围代理。 4. 以下Excel公式以第2至230行为例,后续应改为Excel表格结构化引用或动态范围。 ## 3. 覆盖率与流程完整性指标 ### 3.1 可优化SQL数 口径(考虑到L列缺乏代表性): ```text 临时候选SQL数=M列不为空的SQL数 ``` ```excel =COUNTIF(M2:M230,"<>") ``` > M列不为空只能说明审核平台生成了结果,不能永久替代“原SQL是否值得优化”的判断。 ### 3.2 模型方案覆盖率 ```text 模型方案覆盖率=O列存在有效模型方案的SQL数÷可优化SQL数 ``` 口径: ```excel =COUNTIF(O2:O230,"<>")/COUNTIF(M2:M230,"<>") ``` ### 3.3 模型性能验证覆盖率(从O列补全 负优化的内容) ```text 模型性能验证覆盖率=P列为有效数字的SQL数÷O列存在有效方案的SQL数 ``` ```excel =COUNT(P2:P230)/COUNTIF(O2:O230,"<>") ``` ### 3.4 平台性能验证覆盖率 ```text 平台性能验证覆盖率=N列为有效数字的SQL数÷M列存在平台方案的SQL数 ``` ```excel =COUNT(N2:N230)/COUNTIF(M2:M230,"<>") ``` ### 3.5 DBA复核覆盖率(需要修改) ```text DBA复核覆盖率=R列已完成有效复核的SQL数且O列不为空÷O列存在模型方案的SQL数 ``` ```excel =COUNTIF(R2:R230,"<>")/COUNTIF(O2:O230,"<>") ``` 如果R列同时复核平台方案和模型方案,应增加“复核对象”字段,避免将与模型无关的DBA意见计入模型复核率。 ### 3.6 开发认可反馈率 ```text 开发认可反馈率=S列有有效反馈的SQL数÷R列已完成复核的SQL数 ``` ```excel =COUNTIF(S2:S230,"<>")/COUNTIF(R2:R230,"<>") ``` ### 3.7 修改决策反馈率 ```text 修改决策反馈率=T列有明确决策的SQL数÷R列已完成复核的SQL数 ``` ```excel =COUNTIF(T2:T230,"<>")/COUNTIF(R2:R230,"<>") ``` ### 3.8 反馈闭环完成率 一条记录满足以下条件时,才算完成反馈闭环: - R、S、T均不为空; - T为“是”时,U必须填写; - T为“否”时,V必须填写; - T为“待定”时,W应填写后续责任人和计划日期。 ```text 反馈闭环完成率=满足上述规则的SQL数÷R列已复核SQL数 ``` 建议通过辅助列判断单行是否闭环: ```excel =IF(AND(R2<>"",S2<>"",T2<>"",IF(T2="是",U2<>"",IF(T2="否",V2<>"",W2<>""))),1,0) ``` ## 4. 性能指标 ### 4.1 单条SQL模型提速率 Q列建议由公式自动计算: ```text 模型提速率=(原SQL执行时间-模型优化后执行时间)÷原SQL执行时间 ``` ```excel =IFERROR((K2-P2)/K2,"") ``` - 大于0:模型方案提速; - 等于0:性能无变化; - 小于0:模型方案发生性能回退。 ### 4.3 模型提速成功率(K列是否是我们的运行速度) ```text 模型提速成功率=P0的SQL数 ``` ```excel =SUMPRODUCT(--ISNUMBER(K2:K230),--ISNUMBER(P2:P230),--(K2:K230>0),--(P2:P2300)) ``` ### 4.4 显著提速率 建议将提速20%作为初始显著提速阈值: ```text 显著提速率=模型提速率不低于20%的SQL数÷K、P均有效的SQL数 ``` 如果Q列已自动计算: ```excel =COUNTIF(Q2:Q230,">=20%")/COUNT(Q2:Q230) ``` 阈值应结合测试波动和业务要求调整。1%至5%的差异一般不宜直接认定为有效优化。 ### 4.5 性能回退率(也可直接统计) 建议允许5%的测试波动: ```text 性能回退率=P>K×1.05的SQL数÷K、P均有效的SQL数 ``` ```excel =SUMPRODUCT(--ISNUMBER(K2:K230),--ISNUMBER(P2:P230),--(K2:K230>0),--(P2:P230>K2:K230*1.05))/SUMPRODUCT(--ISNUMBER(K2:K230),--ISNUMBER(P2:P230),--(K2:K230>0)) ``` 建议进一步分级: - 轻微回退:5%至20%; - 严重回退:超过20%; - 极端回退:优化后执行时间超过原执行时间2倍。 ### 4.6 提速率中位数及分位数 ```excel =MEDIAN(FILTER(Q2:Q230,ISNUMBER(Q2:Q230))) ``` 建议同时追踪: - 提速率中位数; - P25、P75; - 提速成功率; - 性能回退率。 不建议只使用平均提速率,因为少数极端值会严重扭曲结果。 ### 4.7 模型对平台胜率 只有K、N、P均为有效数字,且平台和模型使用相同数据、参数、环境和预热方式时,才进入比较样本。 ```text 模型对平台胜率=P") ``` ### 5.4 DBA修改后通过率 ```text DBA修改后通过率=DBA保留模型核心思路但修改后通过的SQL数÷已完成有效复核的SQL数 ``` ```excel =COUNTIF(AD2:AD230,"修改后通过")/COUNTIF(AD2:AD230,"<>") ``` ### 5.5 DBA部分通过率 ```text DBA部分通过率=DBA只认可O列部分建议的SQL数÷已完成有效复核的SQL数 ``` ```excel =COUNTIF(AD2:AD230,"部分通过")/COUNTIF(AD2:AD230,"<>") ``` ### 5.6 DBA综合认可率 ```text DBA综合认可率=完全通过数+修改后通过数+部分通过数÷已复核数 ``` 书写公式时应对分子加括号: ```excel =(COUNTIF(AD2:AD230,"完全通过")+COUNTIF(AD2:AD230,"修改后通过")+COUNTIF(AD2:AD230,"部分通过"))/COUNTIF(AD2:AD230,"<>") ``` 也可以使用固定权重计算加权认可率: ```text 加权认可率=(完全通过×1+修改后通过×0.7+部分通过×0.5)÷已复核数 ``` 权重一旦确定,应在不同模型版本间保持一致。 ### 5.7 DBA否决率 ```text DBA否决率=DBA明确判定模型方案不安全、无效或不可实施的SQL数÷已完成有效复核的SQL数 ``` ```excel =COUNTIF(AD2:AD230,"不通过")/COUNTIF(AD2:AD230,"<>") ``` 否决原因应结构化分类: - 语义不等价; - 结果行数或重复行风险; - 性能回退; - 索引不生效; - 索引维护成本过高; - 未考虑动态业务条件; - 改写风险过高; - 测试环境或参数不可信; - 其他。 ### 5.8 建议级准确率 当一条SQL包含多项模型建议时,应增加建议级指标: ```text 建议级准确率=DBA认可的模型原子建议数÷模型生成的全部原子建议数 ``` 例如,模型生成3项建议,DBA认可其中2项,该SQL的建议级准确率为66.7%。 ### 5.9 DBA新增建议率 ```text DBA新增建议率=R列包含O列未涉及的重要优化动作的SQL数÷已完成有效复核的SQL数 ``` 该指标用于识别模型能力缺口。如果DBA持续补充某一类内容,应将其加入Prompt、规则库或自动验证工具。 ## 6. 开发认可与实际采纳指标 ### 6.1 开发完全认可率 ```text 开发完全认可率=S列为“认可”的数量÷S列有效反馈数量 ``` ```excel =COUNTIF(S2:S230,"认可")/COUNTIF(S2:S230,"<>") ``` ### 6.2 开发部分认可率 ```excel =COUNTIF(S2:S230,"部分认可")/COUNTIF(S2:S230,"<>") ``` ### 6.3 开发综合认可率 ```text 开发综合认可率=(认可数+部分认可数)÷S列有效反馈数 ``` ```excel =(COUNTIF(S2:S230,"认可")+COUNTIF(S2:S230,"部分认可"))/COUNTIF(S2:S230,"<>") ``` 也可以计算加权认可率: ```text 开发加权认可率=(认可数+部分认可数×0.5)÷S列有效反馈数 ``` ### 6.4 最终采纳率 待定记录不进入分母: ```text 最终采纳率=T列为“是”的数量÷(T列为“是”的数量+T列为“否”的数量) ``` ```excel =COUNTIF(T2:T230,"是")/(COUNTIF(T2:T230,"是")+COUNTIF(T2:T230,"否")) ``` ### 6.5 认可到采纳转化率 ```text 认可到采纳转化率=S为“认可/部分认可”且T为“是”的SQL数÷S为“认可/部分认可”的SQL数 ``` ```excel =(COUNTIFS(S2:S230,"认可",T2:T230,"是")+COUNTIFS(S2:S230,"部分认可",T2:T230,"是"))/(COUNTIF(S2:S230,"认可")+COUNTIF(S2:S230,"部分认可")) ``` ### 6.6 模型直接采纳率 需要分析U列最终修改方案与O列模型方案的语义关系: ```text 模型直接采纳率=U与O核心优化动作基本一致的SQL数÷T为“是”的SQL数 ``` 建议将实际方案来源分成: - 模型原方案直接采用; - 模型方案轻微修改后采用; - 只采用模型部分建议; - 采用DBA新增方案; - 采用SQL审核平台方案; - 开发自行实施其他方案。 ### 6.7 DBA最终方案采纳率 ```text DBA最终方案采纳率=U与R最终建议一致的SQL数÷T为“是”的SQL数 ``` ### 6.8 提速但不认可率 ```text 提速但不认可率=P"")) ``` 这类样本应重点分析。它通常说明开发关注的是语义风险、框架限制、改造成本或回归成本,而不是执行速度。 ## 7. 不采纳原因指标 建议将V列自由文本转换为可多选的标准标签: - 无明显性能收益; - 性能回退; - 语义不等价; - 结果集风险; - 新增索引成本过高; - 索引未命中; - PageHelper、MyBatis等框架限制; - 改造成本高; - 回归范围过大; - 调试SQL或一次性SQL; - 当前性能已可接受; - 已使用列存或其他方案; - 无法复现; - 业务场景不适用; - 其他。 ### 7.1 单项不采纳原因占比 ```text 某原因占比=包含该原因标签的不采纳SQL数÷T为“否”的SQL数 ``` 一条SQL可以有多个原因,因此各原因占比之和可以超过100%。 ### 7.2 可解决拒绝率 ```text 可解决拒绝率=因模型质量、Prompt、测试或输出问题被拒绝的SQL数÷全部不采纳SQL数 ``` 建议区分: - 模型可改进原因:语义错误、索引无效、未考虑动态条件、性能回退等; - 外部限制原因:调试SQL、一次性任务、框架无法修改、业务不允许改造等。 ## 8. 正确性与安全指标 现有字段不足以准确计算以下指标,建议新增结构化字段。 | 指标 | 计算方法 | |---|---| | 结果集等价通过率 | 结果集完全一致的SQL数÷完成等价测试的SQL数 | | 行数一致率 | 优化前后行数一致的SQL数÷完成测试的SQL数 | | 关键字段一致率 | 关键字段Hash一致的SQL数÷完成测试的SQL数 | | 多参数场景通过率 | 所有参数组合均通过的SQL数÷完成多场景测试的SQL数 | | 高风险改写率 | 涉及JOIN类型、LIMIT下推、UNION变化等方案数÷模型方案数 | | 生产回滚率 | 因优化方案发生回滚的SQL数÷已上线方案数 | | 生产缺陷率 | 优化方案导致的缺陷数÷已上线方案数 | 安全性指标不能被性能收益抵消。语义不等价的方案即使提速99%,也应判定为失败。 ## 10. 数据质量指标 ### 10.1 SQL唯一标识完整率 ```text SQL唯一标识完整率=D列checksum不为空的SQL数÷C列不为空的SQL数 ``` ```excel =COUNTIF(D2:D230,"<>")/COUNTIF(C2:C230,"<>") ``` ### 10.2 关键字段完整率 ```text 关键字段完整率=候选SQL中K、O、R、S、T及U/V按规则填写完整的数量÷候选SQL数 ``` ### 10.3 Q列计算一致率 ```text Q列计算一致率=Q与(K-P)/K在允许误差内一致的SQL数÷K、P、Q均有效的SQL数 ``` 建议Q列完全改为公式,避免人工填写错误。 ### 10.4 反馈逻辑一致率 逻辑异常包括: - T为“是”但U为空; - T为“否”但V为空; - S为空但已经修改且无法判断方案来源; - O为空但记录为认可模型方案; - P有执行时间但O没有模型方案; - Q与K、P计算结果不一致。 ```text 反馈逻辑一致率=无上述逻辑异常的记录数÷有反馈的记录数 ``` ## 11. 建议新增的结构化辅助字段 | 字段 | 推荐取值或说明 | |---|---| | SQL唯一ID | checksum或规范化SQL指纹 | | 候选状态 | 可优化、无需优化、无法判断 | | 模型版本 | 模型名称及版本号 | | Prompt版本 | Prompt或工作流版本 | | 优化类型 | 索引、改写、分页、JOIN、Hint、列存等 | | 结果等价结论 | 通过、不通过、无法验证 | | 风险等级 | 低、中、高、禁止上线 | | DBA结论 | 完全通过、修改后通过、部分通过、不通过、无法验证 | | DBA否决原因 | 标准化原因标签,可多选 | | 实际方案来源 | 模型、平台、DBA、开发、混合方案 | | 测试环境 | 环境、数据快照及数据库版本 | | 测试参数组 | 典型值、边界值、空值及大数据量场景 | | 上线日期 | 实际发布日 | | 生产验证日期 | 性能回采日期 | | 回滚状态 | 未回滚、已回滚及原因 | ## 12. 核心看板指标(重点) 第一版管理看板建议重点展示以下13项: 1. 模型方案覆盖率; 2. 模型性能验证覆盖率; 3. DBA复核覆盖率; 4. 结果集等价通过率; 5. 模型提速成功率; 6. 性能回退率; 7. 提速率中位数; 8. 模型对平台胜率; 9. DBA完全通过率; 10. DBA综合认可率; 11. 开发最终采纳率; 12. 生产工作负载下降率。 13. DBA否决原因 建议按照以下维度切分指标: - 日期和评测批次; - 模型版本、Prompt版本; - 业务条线、系统、数据库用户; - SQL复杂度和SQL类型; - 优化类型; - 原始耗时区间; - 执行频次区间; - DBA风险等级; - 不认可和不采纳原因。 ## 13. 北极星指标 ### 13.1 模型安全有效率 ```text 模型安全有效率 =结果等价验证通过、无明显性能回退且DBA完全或修改后通过的模型方案数 ÷完成标准化测试的模型方案数 ``` 该指标主要衡量模型本身的技术质量。 ### 13.2 安全有效采纳率 ```text 安全有效采纳率 =已经实际修改、生产验证有收益且没有发生回滚的模型贡献方案数 ÷可优化SQL数 ``` 该指标衡量从模型生成方案到实际产生业务价值的端到端能力。 ## 14. 建议实施顺序 ### 第一阶段:统一口径 - 清洗L列并明确“可优化SQL”的判断规则; - 补齐D列SQL指纹; - 将Q列改为自动公式; - 将DBA结论、否决原因和实际方案来源结构化; - 建立S、T、U、V、W之间的填写校验。 ### 第二阶段:建立标准化评测 - 固定测试环境、数据快照和参数; - 每条SQL至少重复执行多次; - 同时验证执行时间、执行计划和结果等价性; - 同一SQL对平台与模型使用完全一致的测试条件。 ### 第三阶段:建立迭代闭环 - 每周分析性能回退和语义失败样本; - 每月分析DBA否决及开发不采纳原因Top 5; - 按模型版本和Prompt版本比较安全有效率; - 将高频失败模式转化为Prompt约束、规则检查或自动测试; - 上线后持续回采生产指标并追踪回滚情况。