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 サイトの他の関連記事を参照してください。