ホームページ > データベース > mysql チュートリアル > ビュー クエリがダイレクト テーブル クエリと比較してパフォーマンスに差異があるのはなぜですか?

ビュー クエリがダイレクト テーブル クエリと比較してパフォーマンスに差異があるのはなぜですか?

Susan Sarandon
リリース: 2024-10-23 23:13:29
オリジナル
385 人が閲覧しました

Why Does a View Query Exhibit a Performance Discrepancy Compared to a Direct Table Query?

MySQL ビュー クエリのパフォーマンスの不一致

問題:

約 100,000 人のユーザーを含むデータベース テーブルレコードは、直接クエリとビューを使用したクエリとの間に大きなパフォーマンスの違いを示します。テーブルに直接アクセスするクエリのプラン コストは 5200 ですが、ビューにアクセスするクエリのプラン コストは 100,000 です。

説明:

パフォーマンスの不一致は次のとおりです。ビューの実行に使用されるアルゴリズムが原因です。この場合のビューは、WHERE 句で指定されたフィルタリング操作を実行する前に、基になるテーブルからすべての行を一時テーブルに取得する「temptable」アルゴリズムを使用します。対照的に、直接クエリでは「マージ」アルゴリズムが使用され、基になるテーブルのインデックス付きデータに対してフィルタリング操作が直接実行されます。

ビューの WHERE 句

ビュー内の WHERE 句は、ビューが基になるテーブルからすべての行を取得した後に適用されます。これは、ビューが特定のフィルター基準を使用して作成されている場合でも、ビューに対するクエリ内の WHERE 句が一時テーブルから取得された各行に適用されることを意味します。

解決

このパフォーマンスの問題を解決するには、「マージ」アルゴリズムを使用してビューを作成する必要があります。これは、「マテリアライズド ビュー」オプションを使用することで実現できます。マテリアライズド ビューは、ビューの事前に計算されたコピーです。これは物理テーブルに格納されるため、マテリアライズド ビューに対するクエリではフィルタリングに「マージ」アルゴリズムを使用できます。

例:

マテリアライズド ビューを作成するには「マージ」アルゴリズムを使用する場合は、次の構文を使用します。

<code class="sql">CREATE MATERIALIZED VIEW vw_users AS
SELECT state, COUNT(*) AS cnt
FROM users
GROUP BY state;</code>
ログイン後にコピー

マテリアライズド ビューが作成されると、それに対するクエリのプラン コストが削減され、パフォーマンスが向上します。

以上がビュー クエリがダイレクト テーブル クエリと比較してパフォーマンスに差異があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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