ホームページ > データベース > mysql チュートリアル > 結合数を減らしてクエリのパフォーマンスを最適化するにはどうすればよいでしょうか?

結合数を減らしてクエリのパフォーマンスを最適化するにはどうすればよいでしょうか?

Barbara Streisand
リリース: 2024-12-08 21:40:11
オリジナル
307 人が閲覧しました

How Can We Optimize Query Performance by Reducing Join Count?

クエリ パフォーマンスを最適化するための結合数の削減

データベースの最適化では、クエリ速度を向上させるために結合操作を最小限に抑えることが重要です。この原則は、各結合によってクエリのコストが単に追加されるのではなく、増加することを示しています。この概念を説明するために、特定の問題を詳しく調べて、より少ない結合を使用する代替ソリューションを検討してみましょう。

結合結果をカウントするためのクエリ

必要なシナリオを考えてみましょう。 3 つの個別の結合の結果として得られる行数をカウントするには:

  • album to pays_album
  • album から pers_album
  • album から juron_album

通常、単純なアプローチには、それぞれ結合とカウントを実行する 3 つのサブクエリが含まれます。

-- Subquery 1
SELECT COUNT(*)
FROM album alb
LEFT JOIN pays_album payalb USING ( idAlb )
WHERE alb.titreAlb = "LES CIGARES DU PHARAON"

-- Subquery 2
SELECT COUNT(*)
FROM album alb
LEFT JOIN pers_album peralb USING ( idAlb )
WHERE alb.titreAlb = "LES CIGARES DU PHARAON"

-- Subquery 3
SELECT COUNT(*)
FROM album alb
LEFT JOIN juron_album juralb USING ( idAlb )
WHERE alb.titreAlb = "LES CIGARES DU PHARAON"
ログイン後にコピー

ただし、達成することは可能です。単一のクエリで同じ結果が得られます:

SELECT alb.titreAlb AS "Titre",
       COUNT(DISTINCT payalb.idAlb, payalb.PrimaryKeyFields) AS "Pays",
       COUNT(DISTINCT peralb.idAlb, peralb.PrimaryKeyFields) AS "Personnages",
       COUNT(DISTINCT juralb.idAlb, juralb.PrimaryKeyFields) AS "Jurons"
FROM album alb
LEFT JOIN pays_album payalb USING ( idAlb )
LEFT JOIN pers_album peralb USING ( idAlb )
LEFT JOIN juron_album juralb USING ( idAlb )
WHERE alb.titreAlb = "LES CIGARES DU PHARAON"
GROUP BY alb.titreAlb
ログイン後にコピー

DISTINCT キーワードを利用すると、カウントに対する追加の結合の影響が無効になります。このアプローチは、結合を最小限に抑えるという元の概念を効果的に模倣していますが、そのパフォーマンス上の利点は最適なインデックスの可用性によって決まります。それにもかかわらず、これは検討に値する実行可能な代替手段を提供します。

以上が結合数を減らしてクエリのパフォーマンスを最適化するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート