非常に小さなテーブル(最大1000行)にインデックスを使用する理由はありますか?


9

アプリケーション開発時に、私はテーブルの多くを持っている(通常は10〜40個の値、データのストア「小さな」量id+ value時々とtype同様に、「オブジェクト」の属性ホールド)新鮮/腐った、赤/緑/青の製品について。

電子コンポーネントを新しくすることはできず、酸素ガスを赤くすることはできず、テーブルは無制限の行数を持つことができないので、この属性を製品テーブルに入れません...

属性を格納するために、私は、カスタム小さなテーブルを使用します。ここで、2-3フィールド:id、リンクするためのnameアプリケーションで表示するためといつかtype同じカテゴリ内の属性グループ場合。

主要な「オブジェクト」は、中間の多対多のテーブルを介して属性にリンクされています。

アイテム数が1000未満(通常は10〜40)の「小さな辞書」のインデックスを作成して維持する理由はありますか?

私のターゲットデータベースはOracleですが、ベンダーに依存しないことを願っています...

私は記入-いいえ、しかし私の記入を正当化する技術的スキルはありません...

回答:


14

一般的にはい。インデックスがない場合、アクセスパターンはすべての行を検査し、必要なものかどうかを確認する必要があります。問題はテーブルサイズではなく、同時実行性です。分離レベルによっては、スキャンがコミットされていないトランザクションの背後でブロックされ、最終的に「興味のない」行がロック解除されるのを待つだけになる場合があります。スキャンはすべての行を「見る」ことが保証されているため、すべてのスキャンは書き込み(挿入、削除、または更新)の背後でブロックされます。Oracleはデフォルトでスナップショット分離に設定されていますが、この状況では問題ありません(ブロッキングはありません)が、他のベンダーは他のものにデフォルト設定します。SQL Serverはデフォルトで、コミットされた読み取りをブロックます。

インデックスが存在する場合、アクセスパターンは関連する行(目的のキー範囲内)のみを参照するため、ロックの競合に遭遇する純粋な統計的機会が大幅に減少します。


説明をありがとう、フォローアップの質問があります(現在3年後ですが)。最大3行または4行の非常に小さいテーブルはどうですか?
Rob

小さなテーブル(1〜2ページに収まる)はスキャンされる可能性が高い
Remus Rusanu 2016年

MySQLでインデックスを作成するには@Remusが必要
Singh Kailash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.