ホームページ  >  記事  >  データベース  >  MySQL がビュー クエリにインデックスを使用できないのはなぜですか?

MySQL がビュー クエリにインデックスを使用できないのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-11 04:05:02593ブラウズ

Why Can't MySQL Use Indexes for View Queries?

MySQL はビュー クエリにインデックスを使用できませんか?

ビューの有効性について疑問に直面しているにもかかわらず、直面している問題はオプティマイザが述語をビュー クエリにプッシュできない。

MySQL はビュー クエリを個別に実行し、外部クエリを実行する前に中間の「派生」 (MyISAM) テーブルに結果を具体化します。このプロセスでは、ビュー クエリの実行中に外部クエリの述語の考慮がスキップされます。

パフォーマンスの問題への対処

ビュー クエリのパフォーマンスを向上させるには、インデックス構造:

カバー インデックスの作成:

ビュー クエリで参照されるすべての列を含む「カバー」インデックスを定義します。この場合、次のインデックスを作成します:

ON highscores (player, happened_in, score)

このインデックスにより、MySQL は「インデックスを使用」してビュー クエリにアクセスできるようになり、より高価な「ファイルソートを使用する」ことを回避できます。

スタンドアロン クエリを評価する:

ビュー クエリの実行プランを、同様の目的を果たすスタンドアロン クエリと比較します:

SELECT player
     , MAX(score) AS highest_score
     , happened_in
 FROM highscores
WHERE player = 24
  AND happened_in = 2006
GROUP
   BY player
    , happened_in

このスタンドアロン クエリは、

結論:

MySQL でビュー クエリを最適化する鍵は、オプティマイザが適切なインデックスを設計することにあります。活用できる。ビュー クエリは本質的に、外部クエリによって参照される前に実体化される別個のクエリです。この動作を理解することは、MySQL でビューを使用するときに発生する可能性のあるパフォーマンスの落とし穴を回避するために重要です。

以上がMySQL がビュー クエリにインデックスを使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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