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

MySQL如何为满足多条件的post_id批量插入新行?

批量插入符合条件的记录解决方案

核心实现SQL

直接使用INSERT ... SELECT语句批量处理,一次完成符合条件的记录插入,避免循环操作带来的性能损耗:

-- 替换成你的实际表名
INSERT INTO your_table_name (post_id, meta_key, meta_value)
SELECT post_id, 'banner', 'my new banner'
FROM your_table_name t1
WHERE t1.meta_key = 'page-type' 
  AND t1.meta_value = 'city'
  AND NOT EXISTS (
    SELECT 1 
    FROM your_table_name t2 
    WHERE t2.post_id = t1.post_id 
      AND t2.meta_key = 'banner'
  )
GROUP BY post_id; -- 确保同一个post_id只插入一条记录

性能优化建议(针对20万级数据)

  1. 添加联合索引:
    为post_id和meta_key创建联合索引,大幅提升查询和子查询的效率:

    CREATE INDEX idx_post_meta ON your_table_name(post_id, meta_key);
    
  2. 分批次插入(可选):
    如果直接批量插入导致锁表或性能下降,可先将符合条件的post_id存入临时表,再分批次插入:

    -- 创建临时表存储目标post_id
    CREATE TEMPORARY TABLE temp_target_posts AS
    SELECT DISTINCT post_id
    FROM your_table_name t1
    WHERE t1.meta_key = 'page-type' 
      AND t1.meta_value = 'city'
      AND NOT EXISTS (
        SELECT 1 
        FROM your_table_name t2 
        WHERE t2.post_id = t1.post_id 
          AND t2.meta_key = 'banner'
      );
    
    -- 每次插入1000条,调整偏移量直到完成
    INSERT INTO your_table_name (post_id, meta_key, meta_value)
    SELECT post_id, 'banner', 'my new banner'
    FROM temp_target_posts
    LIMIT 0, 1000;
    

验证插入结果

执行以下SQL确认所有符合条件的post_id都已插入banner记录:

SELECT t1.post_id
FROM your_table_name t1
WHERE t1.meta_key = 'page-type' 
  AND t1.meta_value = 'city'
  AND NOT EXISTS (
    SELECT 1 
    FROM your_table_name t2 
    WHERE t2.post_id = t1.post_id 
      AND t2.meta_key = 'banner'
  );

若查询结果为空,说明插入全部完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 22:40:43