ホームページ >データベース >mysql チュートリアル >JOIN を使用して別のテーブルのデータで MySQL テーブルを効率的に更新するにはどうすればよいですか?

JOIN を使用して別のテーブルのデータで MySQL テーブルを効率的に更新するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-03 21:00:39388ブラウズ

How Can I Efficiently Update a MySQL Table with Data from Another Table Using JOINs?

別のテーブルの値を使用して MySQL テーブルを効率的に更新する

ある MySQL テーブルを別のテーブルの情報のみに基づいて更新する必要がある場合値を共有する場合、一般的なアプローチは JOIN を使用することです。ただし、このようなクエリで最適なパフォーマンスを達成するには、慎重な検討が必要です。

次の構造を持つ 2 つのテーブルがあるとします。

Original:

id value
1 hello
2 fortune
3 my
4 old
5 friend

tobeupdated:

uniqueid id value
1 NULL something
2 NULL anything
3 NULL old
4 NULL friend
5 NULL fortune

あなたの目標は、元の対応する値に基づいて id 列を更新することです。次のクエリは簡単に見えるかもしれません:

UPDATE tobeupdated, original
SET tobeupdated.id = original.id
WHERE tobeupdated.value = original.value

特に大きなテーブルの場合、非常に遅くなる可能性があります。これは、MySQL が一致する行を見つけるために両方のテーブルに対してフル テーブル スキャンを実行する必要があるためです。

パフォーマンスの最適化

パフォーマンスを向上させるには、より効率的なアプローチを使用します。 ON 句を含む JOIN:

UPDATE tobeupdated
INNER JOIN original ON (tobeupdated.value = original.value)
SET tobeupdated.id = original.id

INNER JOIN を使用すると、MySQL は次のことのみを考慮します。両方のテーブルの一致する行。さらに、両方のテーブルの値列にインデックスが存在することを確認すると、検索に必要な時間を大幅に短縮できます。

簡略化された構文

同じキー名を持つクエリの場合どちらのテーブルでも、簡単にするために USING 句を使用できます。

UPDATE tobeupdated
INNER JOIN original USING (value)
SET tobeupdated.id = original.id

追加考慮事項

  • テーブル サイズ: 関連するテーブルのサイズは、パフォーマンスに影響を与える可能性があります。データベース設計を最適化するか、インデックス作成手法を使用してパフォーマンスを向上させることを検討してください。
  • カーディナリティ: テーブル間のカーディナリティ (一致する行の数) もパフォーマンスに影響を与える可能性があります。一致する行が多数ある場合、クエリに時間がかかることがあります。

以上がJOIN を使用して別のテーブルのデータで MySQL テーブルを効率的に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。