クエリ パフォーマンスを最適化するための結合数の削減
データベースの最適化では、クエリ速度を向上させるために結合操作を最小限に抑えることが重要です。この原則は、各結合によってクエリのコストが単に追加されるのではなく、増加することを示しています。この概念を説明するために、特定の問題を詳しく調べて、より少ない結合を使用する代替ソリューションを検討してみましょう。
結合結果をカウントするためのクエリ
必要なシナリオを考えてみましょう。 3 つの個別の結合の結果として得られる行数をカウントするには:
通常、単純なアプローチには、それぞれ結合とカウントを実行する 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 サイトの他の関連記事を参照してください。