[解決済み] 外部キーはクエリーのパフォーマンスを向上させるか?
2022-04-26 17:51:05
質問
ProductsとProductCategoriesの2つのテーブルがあるとします。両テーブルはCategoryIdの関係を持っています。そして、これはクエリです。
SELECT p.ProductId, p.Name, c.CategoryId, c.Name AS Category
FROM Products p
INNER JOIN ProductCategories c ON p.CategoryId = c.CategoryId
WHERE c.CategoryId = 1;
実行計画を作成すると、ProductCategoriesテーブルはクラスタインデックスシークを実行し、これは予想通りです。しかし、テーブルProductでは、クラスタインデックススキャンが実行されます。なぜFKはクエリパフォーマンスを向上させないのでしょうか?
そこで、私はProducts.CategoryIdにインデックスを作成しなければなりません。実行計画を再度作成すると、両方のテーブルでインデックスシークが実行されます。そして、サブツリーの推定コストは大幅に削減されます。
質問です。
-
FKは関係制約に役立つ以外に、何か有用なことがあるのでしょうか?クエリパフォーマンスを向上させることができますか?
-
すべてのテーブルのすべてのFKカラム(Products.CategoryIdが好き)にインデックスを作成する必要がありますか?
解決方法は?
外部キーは参照整合性のためのツールであり、パフォーマンスのためのツールではありません。少なくともSQL Serverでは、FKを作成しても関連するインデックスは作成されず、検索時間を短縮するためには、すべてのFKフィールドにインデックスを作成する必要があります。
関連
-
SQLラーニングノート--オペランドには1つのカラムが必要です。
-
[解決済み] 指定されたスキーマにテーブルが存在するかどうかを確認する方法
-
[解決済み] SQLサーバーでNULL = NULLがfalseに評価される理由
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] JOINとINNER JOINの違いについて
-
[解決済み] T-SQLを使用して外部キー制約を一時的に無効にするにはどうすればよいですか?
-
[解決済み] 外部キー制約のあるテーブルを切り捨てるには?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQLのSELECTでIF...THENを実行するにはどうすればよいですか?
-
[解決済み] SQL Serverでシングルクォートをエスケープするにはどうすればよいですか?
-
[解決済み] Oracleの全テーブルのリストを取得しますか?
-
[解決済み] INNER JOINよりもCROSS APPLYを使用すべきなのはどのような場合ですか?
-
[解決済み] T-SQLでnot equalには!=と<>のどちらを使うべきですか?
-
[解決済み] SQLの複数列の順序付け
-
[解決済み] 各グループの上位1行を取得
-
[解決済み] SQLでランダムな行を要求する方法は?
-
[解決済み] 文字列の一部をUPDATEおよびREPLACEする。
-
[解決済み】SQL ServerにおけるINNER JOINとLEFT JOINのパフォーマンス比較