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

如何高效生成level1 question与level2 question列?大数据量优化需求

高效生成Level1/Level2 Question列的SQL方案

针对500万行数据下子查询耗时过长的问题,推荐使用窗口函数实现单次扫描计算,彻底解决关联查询的性能瓶颈。

核心方案(带明确分组键)

假设你的表存在用于划分组的字段(如group_id,同一组内的行共享Level1/Level2 Question),直接用窗口函数聚合:

SELECT
    -- 保留原表所有需要的字段
    id, level, type, question, other_columns,
    -- 提取当前组内符合条件的Level1 Question
    MAX(CASE WHEN level = 1 AND type = 'Group' THEN question END) OVER (PARTITION BY group_id) AS `level1 question`,
    -- 提取当前组内符合条件的Level2 Question
    MAX(CASE WHEN level = 2 AND type = 'Group' THEN question END) OVER (PARTITION BY group_id) AS `level2 question`
FROM your_table;

无明确分组键的场景(按行顺序分组)

如果没有固定分组键,而是按行的顺序划分组(如Level1 Group行之后的所有行属于该组,直到下一个Level1 Group行),先用累积窗口函数标记分组:

WITH grouped_data AS (
    SELECT
        id, level, type, question, other_columns,
        -- 每遇到Level1 Group行,生成新分组ID
        SUM(CASE WHEN level = 1 AND type = 'Group' THEN 1 ELSE 0 END) OVER (ORDER BY id) AS group_id
    FROM your_table
)
SELECT
    id, level, type, question, other_columns,
    MAX(CASE WHEN level = 1 AND type = 'Group' THEN question END) OVER (PARTITION BY group_id) AS `level1 question`,
    MAX(CASE WHEN level = 2 AND type = 'Group' THEN question END) OVER (PARTITION BY group_id) AS `level2 question`
FROM grouped_data;

性能优化补充

  • 给PARTITION BY和ORDER BY用到的字段(如group_id、id)创建索引,能进一步加速窗口函数的计算
  • 该方案支持MySQL 8.0+、PostgreSQL、SQL Server等主流数据库,无需复杂子查询关联,500万行数据通常能在数分钟内完成计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:43:12