SSDを使用する場合、DB設計のクラスター化インデックスの概念は意味がありますか?


44

SQLサーバーのデータスキーマと後続のクエリ、Sproc、ビューなどを設計するとき、クラスター化インデックスの概念とディスク上のデータの順序は、SSDプラットフォームに明示的に展開されるように設計されたDB設計について考慮する必要がありますか?

http://msdn.microsoft.com/en-us/library/aa933131(v=sql.80).aspx
「クラスター化インデックスは、テーブル内のデータの物理的な順序を決定します。」

物理ディスクプラットフォームでは、「シーケンシャル」行を取得するためのデータの物理スキャンは、テーブルをシークするよりもパフォーマンスが高いため、これらを考慮する設計は理にかなっています。
SSDプラットフォームでは、すべてのデータ読み取りアクセスで同一のシークが使用されます。「物理的順序」の概念はなく、データの読み取りは、ビットが同じシリコンに格納されるという意味で「シーケンシャル」ではありません。

それでは、アプリケーションデータベース設計する過程で、クラスタ化インデックスの考慮事項はこのプラットフォームに関連していますか?

私の最初の考えは、「順序付けられたデータ」の概念がSSDストレージとシーク/リトライバルの最適化に適用されないためではないということです

編集:私はSQL Server がそれを作成することを知っています、私はそれが設計/最適化中にそれを考えることが理にかなっているかどうかについて哲学的です。


回答:


34

別の質問を自問してください:データベース全体がメモリにあり、ディスクに触れる必要がない場合、データを順序付けられたBツリーに格納しますか、またはデータを順序付けられていないヒープに格納しますか?

この質問に対する答えは、アクセスパターンによって異なります。ほとんどの場合、アクセスには単一行の検索(シーク)と範囲スキャンが必要です。これらのアクセスパターンにはBツリーが必要です。それ以外の場合は非効率的です。DWおよびOLAPで一般的なその他のアクセスパターンは、常にテーブル全体をエンドツーエンドで集約し、範囲スキャンの恩恵を受けません。さらに掘り下げると、ヒープへの挿入と割り当ての速度とBツリーのような他の要件が明らかになり、巨大なETL転送ジョブの役割を果たす可能性があります。しかし、ほとんどの場合、答えは本当に1つの質問に要約されます:あなたはシークまたはレンジスキャンですか?答えがYESの圧倒的な回数。したがって、デザインがクラスター化インデックスを必要とする圧倒的な回数です。

言い換えれば、ランダムな順序でディスクから読み取るのが安価だからといって、64GB RAMスキャンボナンザでTLBとL2ラインを破壊できるということではありません...


メモリ内であっても、ベースヒープ内の行を検索するコストは、シークで直接行を取得するコストよりも常に高くなります。メモリアクセスの局所性だけでなく、関係する膨大な数の命令(ルックアップは基本的には結合であり、すべての結合演算子機構から)からです。
レムスルサヌ

23

適切に選択されたクラスター化インデックスを使用する場合、必要なすべての関連データをより少ないページのデータで取得する可能性が高くなります。つまり、必要なデータをより少ないメモリで保持できます。これにより、回転ディスクを使用するかSSDを使用するかに関係なく利点が得られます。

ただし、クラスター化インデックスのその他の利点(多くのディスクシークではなく、関連データを順番に読み書きすること)は、SSDにとって大きな利点ではありません。回転ディスクを使用しています。


@Matthew PKのコメントについて。

もちろん、RAMのロケーションAはRAMのロケーションBと同じくらい速いです。それはポイントではありません。データが多くのページに散らばっている場合、必要なすべてのデータがRAMに収まらない場合について話しています。特定のページには、関心のあるデータが少量しか含まれていない可能性があります。そのため、RDBMSは、A、B、およびその他の行にアクセスするときに、ページのロードとパージを継続する必要があります。ここでパフォーマンスが低下します。

後続のすべての行要求がRAM内のページから提供されることを期待して、すべてのページが関心のあるデータで満たされている方がよいでしょう。クラスター化インデックスを使用すると、データをより少ないページにグループ化できます。


13

はい、それは絶対に意味をなします。アプローチが低すぎると考えています。SQL Server(非常 簡単に説明すると)は、クラスター化されたデータをBツリーアーキテクチャに格納します。これにより、クラスター化インデックスキーの値に基づいた高速なデータ取得が可能になります。

ヒープ(クラスター化インデックスなし)には、データの順番はありません。ここで考慮すべき最も重要なことは、データページがリンクリストでリンクされていないことです。

したがって、答えは「はい」です。SSD上であっても、テーブル上にクラスター化インデックスを作成することには意味があります。すべては、SQL Serverが結果データに到達するためにふるいにかける必要があるデータの量に基づいています。クラスター化インデックスシークでは、最小化されます。

参照:http : //msdn.microsoft.com/en-us/library/ms189051.aspx


そこますクラスタ化インデックスです。要点は、SSDプラットフォーム上でシークに沿ったシークが重要かどうかでした
マシュー

5
はい、シークは重要です。300リードではなく3リードの方が、使用しているメディアに関係なく高速です。
トーマスストリンガー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.