多くのSQLの書籍や記事では、インデックスの作成において選択性が重要な要素であることを読んでいます。列の選択性が低い場合、インデックスシークはその優位性をより害する。しかし、記事のどれも理由を説明していない。それがなぜそうであるか説明したり、関連記事へのリンクを提供することができますか?ロバート・シェルドンによってSimpleTalk物品からインデックススキャン/シークにおける選択性の役割
答えて
:14 SQL Server Indexing Questions You Were Too Shy To Ask
キー列内のユニークな値の比を指標 選択性と呼ばれています。よりユニークな値であるほど、選択性が高くなります。 これは、ユニークなインデックスが可能な限り高い選択性を持つことを意味します。 クエリエンジンは、特に 実行クエリのWHERE節で の列が参照されている場合は、非常に選択的なキー列が大好きです。選択性が高いほど、クエリエンジンが高速になります 結果セットのサイズを減らすことができます。もちろん、フリップサイドは、 であり、比較的少数の固有値を持つ列は、ほとんどインデックス化されない候補の です。
また、これらの記事をチェック:
- チェックthis post Pinalデイブによって
- this other SQL Serverpedia上
- This forum post SqlServerCentralにはあまりにもあなたを助けることができます。 SqlServerCentral上
- This article SqlServerCentral記事からも
:一般的に
、非クラスタ化インデックスを選択する必要があります。つまり、列内の の値はかなりユニークである必要があり、その上のフィルタ がテーブルの小さな部分を返すようにクエリします。
この理由は、RID /キールックアップが高価な操作 であり、非クラスタ化インデックスは、それが検索 のコストではないことをカバーするか、十分に選択することが を必要とするクエリを評価するために使用される場合ということです高すぎると思われる。
SQLが不十分選択インデックス(または クエリが上で求めていることになるインデックスキーのサブセットが)、インデックスは無視され、クエリが クラスタ化インデックスとして実行されたことを非常に 可能性があるとみなした場合(テーブル)スキャン。
これは、先頭の 列にのみ適用されるものではありません。非常に非選択的な列が先頭の列として使用される であり、インデックスの他の列が使用されるのに十分に選択的であるようなシナリオがあります。
私は(SQL Serverのの私の現在の知識に基づいて)非常に簡単な説明を記述しよう:
指数が低い選択性を有する場合は、同じ値の合計行の大きな割合があることを意味見つかりました。(500行からの200のように、インデックスに基づいて同じ値を持っています)
通常、インデックスに必要なものすべての列情報が含まれていない場合は、ポインターを使用しています。インデックス上の "エントリ"に接続します。次に、secpndステップで、エンジンはその行を読み出す必要があります。
このように2段階で検索すると、そして、ここに選択性が来る:
多くの結果は、エンジンがしなければならないより低い選択性のより多くの二重の仕事を得る。だから、テーブルスキャンでさえ効率が良く、次に選択性が非常に低いインデックスシークがあるという事実から、いくつかのケースがあります。
しかし、結果の数はテーブルスキャンの方が多くなります。少なくともインデックスシークの場合、類似したレコードを含むデータブロックの部分へのジャンプはより速い。 – SexyBeast
しかし、テーブルスキャンでは、obeレコードを一度読み取っています。二度も読み取れません。そして、プロセス全体で最もコストがかかるssdハードドライブでは、「ヘッドモーブ」時間を計算する必要があります。 –
- 1. SMACKアーキテクチャにおけるAkkaの役割
- 2. PHPにおける複数選択チェックボックスの妥当性チェック
- 3. セマンティックモデリングにおけるRDFSの公理と同義ルールの役割
- 4. Tomcat 6のwarファイル展開におけるtempフォルダの役割
- 5. インターネットセキュリティにおけるSHA-2の役割は何ですか?
- 6. JMSエコシステムにおけるJMSブローカの役割は何ですか?
- 7. SOAにおける "Service Broker"の役割は何ですか?
- 8. Ruby on Railsにおける複数のユーザ役割
- 9. WSO2 IS SAMLレスポンスにおけるFacebookユーザーの役割
- 10. 機能の選択とテキストマイニングにおけるドキュメントの類似性の評価
- 11. Postgresqlの選択、ユーザーの役割の行が1
- 12. 既存のデータアクセスオブジェクトクラスにおけるApache Shiroの役割とアクセス許可の影響
- 13. 仮想ビーコン作成におけるBluezの役割の正確さ
- 14. 関数宣言におけるこのマクロの役割は何ですか?
- 15. Haskell Collection APIの `Unfoldable` typeclassにおける関数依存関係の役割
- 16. マルウェア解析におけるNASMプログラミングの役割は何ですか
- 17. MakefileにおけるDEPENDSの正確な役割は何ですか?
- 18. ユーザー名と役割名を選択してください
- 19. Syliusでは、ユーザーデータに応じてユーザーの役割を選択する方法は?
- 20. checkoutページお届け先を選択
- 21. MVC3余分な役割の属性
- 22. 損失計算におけるKerasコンポーネントの選択に
- 23. 生産におけるAngularjsの依存関係の選択
- 24. 選択したIAMユーザーに役割の切り替えを許可します。
- 25. Pythonのマルチクラスロジスティック回帰における機能選択
- 26. グループ分けで特性値を選択
- 27. ライフサイクルで選択された役割に従って投票を表示
- 28. ASP.NETアイデンティティに延びる役割/役割グループに
- 29. Woocommcersにおける顧客の役割のように振る舞うユーザーロールを作成する方法
- 30. Rails:デベロッパにサインアップするときにユーザーが自分の役割を選択できるようにする
ダウンタイムやひどい顔をユーザから避けるために、実稼働前にテストしてください。 – Yaroslav