すべての顧客/ユーザーは、常にデータ取 そのため、データ操作中に最高のパフォーマンスを提供する優れたデータベースを設計し、アプリケーションの最高のパフォーマンスをもたらす必要があ ただし、最高のパフォーマンスを定義する簡単な方法はありませんが、インデックスの作成、結合の使用、結合を使用するサブクエリの書き換えなど、さまざ
開発者として、SQLクエリは複数の方法で記述できることはわかっていますが、クエリのパフォーマンスを向上させるためには、ベストプラクティス/テク 私はそれらのいくつかを以下に強調しています:
1。 データの存在を確認するには、INの代わりにEXISTSを使用します。
2. SELECT文では*を避けます。 必要な列の名前を指定します。
3. 適切なデータ型を選択します。 文字列を格納するには、textデータ型の代わりにvarcharを使用します。 大きなデータ(8000文字を超える)を格納する必要があるときはいつでも、textデータ型を使用します。
4. 両方のデータ型はcharとvarcharとして二重メモリを取るだけなので、可能であればncharとnvarcharを避けてください。
5. 固定長フィールドではNULLを避けます。 NULLが必要な場合は、NULLのためのスペースが少ない可変長(varchar)フィールドを使用してください。
6. 句を持つことは避けてください。 集計の結果をさらにフィルタリングする場合は、Having句が必要です。
7. クラスター化インデックスと非クラスター化インデックスを作成します。
8. クラスタ化インデックスで使用されるフィールドは、非クラスタ化インデックスでも使用される可能性があるため、クラスタ化インデックスを小さくしてください。
9. ほとんどの選択列は、非クラスター化インデックスのキーの一番左に配置する必要があります。
10. 未使用のインデックスを削除します。
11. 文字ではなく整数値を持つ列にインデックスを作成することをお勧めします。 整数値は、文字値よりもオーバーヘッドが少なくなります。
12. サブクエリの代わりに結合を使用します。
13. 結合で作成される結果テーブルのサイズを制限するには、WHERE式を使用します。
14. テーブルへの挿入時にはTABLOCKXを使用し、マージ時にはTABLOCKを使用します。
15. 任意のテーブルからデータを照会するときにWITH(NOLOCK)を使用します。
16. デッドロック状態を回避するには、SET NOCOUNT ONを使用し、TRY-CATCHを使用します。
17. Cursorのパフォーマンスは非常に遅いため、カーソルは避けてくださ
18. 一時テーブルの代わりにテーブル変数を使用します。 一時テーブルを使用するには、時間のかかる作業であるTempDbデータベースとの相互作用が必要でした。
19. 可能であれば、UNIONの代わりにUNION ALLを使用してください。
20. SQLオブジェクト名の前にスキーマ名を使用します。
21. 頻繁に使用されるデータや、より複雑なクエリにはストアドプロシージャを使用します。
22. トランザクションは処理テーブルのデータをロックし、結果がデッドロックになる可能性があるため、トランザクシ
23. SQL serverは最初にmasterデータベースでユーザー定義プロシージャを検索し、その後は現在のセッションデータベースで検索するため、プレフィックス”sp_”にユーザー定義ストアドプロシージャ名を付けることは避けてください。
24. 非相関スカラサブクエリの使用は避けてください。 このクエリをメインクエリの一部ではなく別のクエリとして使用し、出力を変数に格納します。
25. 複数ステートメントのテーブル値関数(Tvf)は避けてください。 マルチステートメントTvfは、インラインTvfよりも高価です。
幸せな学習!