Qwen分析MySQL表结构需结合DDL、慢查询样本和QPS监控三类上下文数据,并按主键设计、索引覆盖、外键约束、字段类型四维度严格评估,否则无法识别热点写入、隐式转换等结构性隐患。
当你用Qwen大模型分析MySQL表结构时,它可能快速输出“字段类型合理”“索引配置得当”这类结论,但真实业务中,一张看似规范的表却在高并发写入时频繁死锁、在JOIN查询时响应超时、在扩容时无法在线修改字段——这些缺陷Qwen不会主动告诉你,除非你喂给它的不是DDL语句截图,而是带上下文的真实表结构+访问日志+慢查询样本。本指南不教你怎么让模型“看懂SQL”,而是教你如何构造输入、设置约束、验证输出,让Qwen真正揪出那些藏在CREATE TABLE语句背后的结构性隐患。
只把SHOW CREATE TABLE xxx的结果丢给Qwen,等于让医生只看化验单不问病史。必须打包三类材料:【DDL语句】、【最近7天慢查询TOP10样本】、【该表每日读写QPS与峰值TPS监控截图】。这三者缺一不可——没有慢查询样本,Qwen无法判断索引是否覆盖高频WHERE条件;没有QPS数据,它会默认该表是低频配置,忽略连接池耗尽风险。
把这三类材料合并为一个Markdown文本块,用---分隔不同部分。不要截图DDL,必须是可复制的纯文本;慢查询样本保留EXPLAIN FORMAT=TRADITIONAL输出结果,而非仅SQL语句;QPS数据用表格呈现,列名必须为timestamp、reads_per_sec、writes_per_sec。
注意:如果表使用了JSON字段存储关键业务属性(如订单状态流转记录),必须额外提供该JSON字段的典型值样例,并标注哪些键会被高频WHERE或ORDER BY。Qwen对JSON内路径的索引可行性判断,严重依赖你提供的实际键名和访问模式。
直接问“这张表设计有没有问题”会得到泛泛而谈的回答。必须强制Qwen按四个硬性维度逐项检查:
方法一:指令式约束
在Prompt开头明确声明:“你是一名有5年MySQL内核调优经验的DBA,正在审计生产环境表。请严格按以下四点输出,每点必须标注‘通过’或‘风险’,并给出修复命令示例:① 主键设计是否引发热点写入(检查主键是否单调递增且无业务含义);② 索引覆盖是否满足所有慢查询的WHERE+ORDER BY+SELECT字段;③ 外键约束是否缺失导致应用层数据不一致(对比关联表的业务逻辑);④ 字段类型是否造成隐式转换(重点检查VARCHAR与INT比较、DATETIME与时区处理)。”
方法二:反事实引导
追加一句:“如果这张表明天要支撑日均500万订单写入,请指出当前设计中会在第3天凌晨2点首次触发的瓶颈点,并说明现象(如:唯一索引争用导致insert延迟突增至800ms)。”这种设定能迫使Qwen跳出静态语法分析,模拟真实负载下的行为推演。
第一步:检查它是否识别出自增主键与业务时间强耦合的问题。例如user_id bigint AUTO_INCREMENT PRIMARY KEY配合created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,Qwen必须指出“新用户注册集中在每小时整点,导致InnoDB页分裂加剧,建议改用雪花ID或UUID_SHORT()”。如果它只说“主键类型合适”,立刻弃用该次分析。
第二步:让它对每个慢查询样本反向生成EXPLAIN结果。把Qwen输出的“应添加联合索引idx_status_created”拿去执行CREATE INDEX,然后用原慢查询跑EXPLAIN。如果type仍为ALL或rows扫描量未下降90%以上,说明Qwen的索引建议失效——此时它大概率误判了WHERE条件的选择率,需回传该查询的实际执行计划截图,要求重分析。
第三步:重点盯住JSON字段的评估。若Qwen说“JSON字段设计合理”,立即追问:“该JSON中status_history数组平均长度23,最大嵌套深度4,当前查询中92%请求只取status_history[0].code,是否应拆出独立字段?若拆出,如何保证原子性更新?”【Qwen无法回答此问题,即证明它未真正理解JSON字段的访问模式】。此时必须人工介入,用MySQL 8.0.23+的多值索引或生成列重建方案。