問題タブ [non-clustered-index]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
3374 参照

sql - SQL Server: NonClustered インデックスが使用されていません

インデックス作成とそれらの違いについて多くのことを読みました。現在、プロジェクトでクエリの最適化に取り組んでいます。クエリの実行時に使用する必要がある非クラスター化インデックスを作成しましたが、そうではありません。以下の詳細:

テーブル:

ここに画像の説明を入力

索引:

Entity Framework によって生成されたクエリ:

実行計画:

ここに画像の説明を入力

インデックスの詳細がありません:

インデックスに AssetId と Active 列を含めると、インデックスが使用されることを認識しています。

では、列を含めないと機能しないのはなぜですか?

これは、結果としてすべての列がフェッチされる別のクエリの簡単な例です。(強制) インデックス シークの使用に対する唯一の解決策は、同じ推定サブツリー コストを持つインデックスにすべての列を含めることです (明らか)。

ここでのもう 1 つの厄介な問題は、Sort の無知です。日付列はインデックスにあり、DESCENDING に設定されています。それは完全に無視されます。もちろん、Sort 操作は実行計画で高価な場所を占めます。

更新 1:

@Jayachandran が指摘したように、上記のクエリでは IndexSeek + KeyLookUp を使用する必要がありますが、インデックスのカバーは十分に文書化されており、AssetId および Active 列を含める必要があると想定しています。私はそれに同意します。

以下のクエリでカバリング インデックスの有用性を示すために、UPDATE 1 を作成しています。同じテーブル、より大きな結果セット。私が理解できる限り、単一の列をインデックスで使用しないでください。インデックスは、日付および削除された列に対して作成されたままです。

0 投票する
2 に答える
4915 参照

mysql - SQL のクラスター化インデックスと非クラスター化インデックスに基づいてクエリを最適化しますか?

私は最近、方法clustered indexnon-clustered index仕組みについて読んでいます。簡単な言葉での私の理解(間違っている場合は修正してください):

clustered裏打ちされnon-clustered indexたデータ構造B-Tree

Clustered Index: インデックス列 (またはキー) に基づいてデータを物理的に並べ替えます。clustered Indexごとに 1 つだけ持つことができますtableindexテーブルの作成時にno が指定された場合、SQLサーバーは自動的に に を作成しclustered Indexますprimary key column

Q1 : データはインデックスに基づいて物理的にソートされているため、ここに余分なスペースは必要ありません。これは正しいです?作成したインデックスを削除するとどうなりますか?

Non-clustered Index: ではnon-clustered indexesleaf-nodeツリーの には、列の値と、データベース内の実際の行へのポインター (行ロケーター) が含まれています。non-clustered index tableこれを物理的にディスクに格納するために余分なスペースが必要です。ただし、1本は数に限りません。non-clustered Indexes.

Q2 : 非クラスター化インデックス列に対するクエリでは、並べ替えられたデータが得られないということですか?

Q3 : リーフ ノードのポインタを使用して実際の行データを見つけるために、ここに関連付けられた追加のルックアップがあります。クラスター化インデックスと比較した場合、これはどの程度のパフォーマンスの違いになりますか?

演習:

Employee テーブルを考えてみましょう:

ここで、employee テーブルを作成しました (employee のデフォルトのクラスター化インデックスが作成されます)。

このテーブルに対する 2 つの頻繁なクエリは、年齢列と給与列でのみ発生します。簡単にするために、テーブルが頻繁に更新されないと仮定しましょう

例えば:

Q4 : インデックスを構築する最良の方法は何ですか。これらの両方の列に対するクエリのパフォーマンスが同様になります。age 列の age クエリにクラスター化インデックスがある場合、age 列のクエリは高速になりますが、salary 列よりも遅くなります。

Q5 : 関連するメモとして、一意の制約を持つ列にインデックス (クラスター化されたインデックスとクラスター化されていないインデックスの両方) を作成する必要があることを繰り返し見てきました。何故ですか?これを怠るとどうなりますか?

どうもありがとうございました。私が読んだ投稿は次のとおりです。

http://javarevisited.blogspot.com/2013/08/difference-between-clustered-index-and-nonclustered-index-sql-server-database.html

http://msdn.microsoft.com/en-us/library/ms190457.aspx

クラスター化されたものとクラスター化されていないもの

クラスター化インデックスと非クラスター化インデックスの実際の意味は何ですか?

クラスター化インデックスと非クラスター化インデックスの違いは何ですか?

データベースのインデックス作成はどのように機能しますか?

0 投票する
1 に答える
6798 参照

sql-server - 非クラスター化インデックス スキャンとは

テーブル スキャン、クラスター化インデックス スキャン、およびインデックス シークが何であるかは知っていますが、Google のスキルでは、非クラスター化インデックス スキャンの正確な説明を見つけることができませんでした。クエリが非クラスター化インデックス スキャンを使用する理由と時期は?

ありがとうございました。

0 投票する
2 に答える
10316 参照

sql-server - SQL Server: 名前を付けずに非クラスター化インデックスを作成する

SQL Server 2008 を使用しています。

テーブルに非クラスター化インデックスを作成しようとしています。インデックスに名前を付けずにこれを作成する方法があるかどうかを確認したいと思います。

例えば

このテーブルに PK を追加するとき、そのキーの名前を指定しません。例えば

名前を指定せずに非クラスター化インデックスを作成するのと同様のことは可能ですか?

例えば

私が知っている唯一のコマンドは

0 投票する
1 に答える
211 参照

sql-server - 数百万行のテーブル内のクラスター化インデックスと非クラスター化インデックスのベスト プラクティス

以下のような列を持つSql Server 2008のテーブルがあります

ここで CLI_ID 、 INSURANCEPOliCY_No は複合主キーです。テーブルには 2 億行以上の行があります。現在、CLI_ID に非クラスター化インデックスを作成しています。これにより、検索のパフォーマンスが向上するか、または作成する方法があれば教えてください。より高速です。どんな助けでも大歓迎です。

0 投票する
1 に答える
347 参照

sql-server - SQL クエリがより多くのページを読み取るのに高速なのはなぜですか?

ビュー内のテーブルに追加されるいくつかの非クラスタ化インデックスをテストしていました(7つの内部結合があります)。Tunning Advisor (SQL Server 2008) を実行すると、テーブル (a) に非クラスター化インデックスを作成するスクリプトが表示され、クエリの最適化に役立ちます。

インデックスを作成する前に、クエリを実行して IO および TIME 統計を取得しました。

nonClustered インデックスを作成した後、次のようになりました。

ACの行を確認してください。Aでは 300 ページ多く、 Bでは 32 ページ少ないだけです。では、なぜこのクエリの方が速いのでしょうか? クエリが読み取るページが多いほど、パフォーマンスが低下するといつも思っていました

0 投票する
1 に答える
7030 参照

sql-server - 検索テーブル列に一時的な非クラスターインデックスを作成し、選択操作後に削除する方法

1000 を超えるレコードを返すストアド プロシージャが 1 つあります。

検索テーブルの列に一時的な非クラスター インデックスを作成したいのは、非クラスター インデックスがデータ取得 (SELECT) 操作を高速化し、データ更新 (UPDATE および DELETE) 操作を遅くし、後でその非クラスター インデックスを削除すると聞いたからです。操作が完了しました。

UserDetails と CategoryMaster の 2 つのテーブルと検索フィールドがあるように:

  • UserDetails (サービスの説明、スキル)
  • カテゴリーマスター(名前)

これは私のストアドプロシージャです:

私のUserDetails作成クエリ:

ストアド プロシージャで一時的な非クラスター インデックスを作成し、選択操作の後にその非クラスター インデックスを削除することは可能ですか????

0 投票する
1 に答える
31 参照

sql - インデックス サイズに到達できません

テーブルの列に非クラスター化インデックスを作成しました。これには 5 GB のインデックス データが含まれていますが、ディスク上で +5 GB のデータ サイズの変更を確認できません。

助言がありますか?

ありがとう