Maison >Problème commun >Comment insérer par lots dans la sélection

Comment insérer par lots dans la sélection

小老鼠
小老鼠original
2024-05-10 00:36:201578parcourir

L'utilisation de l'instruction INSERT INTO SELECT pour l'insertion par lots peut améliorer efficacement l'efficacité de l'insertion de grandes quantités de données. Les étapes spécifiques sont les suivantes : Déterminez la taille du lot, plusieurs milliers de lignes sont recommandées. Créez une table temporaire pour stocker le sous-ensemble de données à insérer. Utilisez l'instruction INSERT INTO SELECT pour insérer des données de la table source dans la table temporaire, en utilisant la clause LIMIT pour limiter le nombre de lignes insérées à la fois. Utilisez à nouveau l'instruction INSERT INTO SELECT pour insérer des données de la table temporaire dans la table cible. Supprimez les tables temporaires qui ne sont plus nécessaires.

Comment insérer par lots dans la sélection

Comment utiliser l'instruction INSERT INTO SELECT pour l'insertion par lots

Lorsque vous devez insérer une grande quantité de données d'une table à une autre, utilisez l'option INSERT INTO SELECT instruction pour l'insertion par lots L'insertion peut améliorer l'efficacité. Les insertions par lots sont implémentées en divisant les opérations d'insertion volumineuses en lots plus petits, réduisant ainsi la charge sur le serveur de base de données. INSERT INTO SELECT 语句进行分批插入可以提高效率。分批插入通过将大型插入操作分解成较小的批次来实现,从而减少对数据库服务器的压力。

步骤:

  1. 确定批次大小: 选择一个合适的批次大小,既能充分利用数据库服务器的资源,又不占用过多内存。一个好的经验法则是将批次大小设置为几千行。
  2. 创建临时表: 创建一个临时表来存储要插入的数据的子集。临时表只在当前会话中存在,可用于将数据划分为批次。
  3. 使用 INSERT INTO SELECT 语句插入数据: 编写一个 INSERT INTO SELECT 语句,将数据从源表插入到临时表。使用 LIMIT 子句限制每次插入的行数,以创建一个批次。
<code class="sql">INSERT INTO #temp_table
SELECT TOP (@batch_size) *
FROM source_table
WHERE NOT EXISTS (SELECT 1 FROM destination_table WHERE id = source_table.id);</code>
  1. 从临时表插入到目标表: 再次使用 INSERT INTO SELECT 语句,将数据从临时表插入到目标表。
<code class="sql">INSERT INTO destination_table
SELECT * FROM #temp_table;</code>
  1. 删除临时表: 插入完成后,删除不再需要的临时表。
<code class="sql">DROP TABLE #temp_table;</code>

优点:

  • 提高插入性能
  • 减少对数据库服务器的压力
  • 便于控制批次大小

注意:

  • 使用 IDENTITY_INSERT
  • Étapes :
    Déterminez la taille du lot :🎜Choisissez une taille de lot appropriée qui peut utiliser pleinement les ressources du serveur de base de données sans occuper trop de mémoire. Une bonne règle générale consiste à définir la taille du lot sur quelques milliers de lignes. 🎜🎜🎜Créer une table temporaire : 🎜 Créez une table temporaire pour stocker un sous-ensemble des données à insérer. Les tables temporaires n'existent que dans la session en cours et peuvent être utilisées pour diviser les données en lots. 🎜🎜🎜Insérer des données à l'aide de l'instruction INSERT INTO SELECT : 🎜 Écrivez une instruction INSERT INTO SELECT pour insérer des données de la table source dans la table temporaire. Utilisez la clause LIMIT pour limiter le nombre de lignes insérées à la fois pour créer un lot. 🎜rrreee
      🎜🎜Insérer de la table temporaire vers la table cible : 🎜 Utilisez à nouveau l'instruction INSERT INTO SELECT pour insérer des données de la table temporaire dans la table cible . 🎜
    rrreee
      🎜🎜Supprimer la table temporaire : 🎜 Une fois l'insertion terminée, supprimez la table temporaire qui n'est plus nécessaire. 🎜
    rrreee🎜🎜Avantages :🎜🎜
      🎜Améliorez les performances d'insertion🎜🎜Réduisez la pression sur le serveur de base de données🎜🎜Taille du lot facile à contrôler🎜🎜🎜🎜Remarque :🎜🎜
        🎜Utilisez Le L'option IDENTITY_INSERT peut provoquer des conflits de clé primaire. 🎜🎜Assurez-vous que les tables source et cible ont des schémas compatibles. 🎜🎜Surveillez le processus d'insertion pour garantir l'intégrité des données. 🎜🎜

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn