You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Grafana中高效获取无缺失值的MySQL性能测试数据

高效生成MySQL性能测试宽表(无嵌套子查询方案)

核心实现思路

利用条件聚合结合GROUP BY直接生成宽表,同时通过HAVING子句过滤掉缺失任意测量值的固件版本行,全程无需嵌套子查询,仅需一次表扫描,性能远优于子查询方案。

最终SQL语句

SELECT
  firmware_revision,
  ANY_VALUE(CASE WHEN inbound_traffic_size = '1B' THEN measurement_value END) AS traffic_1B,
  ANY_VALUE(CASE WHEN inbound_traffic_size = '500B' THEN measurement_value END) AS traffic_500B,
  ANY_VALUE(CASE WHEN inbound_traffic_size = '1000B' THEN measurement_value END) AS traffic_1000B
FROM performance_test_data
GROUP BY firmware_revision
HAVING
  traffic_1B IS NOT NULL
  AND traffic_500B IS NOT NULL
  AND traffic_1000B IS NOT NULL;

关键优化点说明

  1. 条件聚合的优势:
    每个CASE WHEN匹配对应流量大小的测量值,ANY_VALUE()(MySQL 5.7+支持)用于提取唯一匹配值(若每个固件+流量组合仅一条数据,用MAX()/MIN()也可),整个逻辑仅扫描一次数据表,避免子查询多次扫描的额外开销。

  2. HAVING过滤不完整行:
    直接在聚合后通过HAVING检查三个流量的测量值是否都不为空,精准过滤掉像firmware_revision 1.6这类缺失数据的行,无需额外子查询筛选有效固件版本。

  3. 索引优化建议:
    若数据量较大,创建联合索引可进一步提升查询速度:

    CREATE INDEX idx_firmware_traffic ON performance_test_data(firmware_revision, inbound_traffic_size);
    

    该索引能让MySQL快速定位每个固件对应的三类流量数据,减少聚合时的排序和查找耗时。

内容的提问来源于stack exchange,提问作者Michal H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:57:49