2011-12-14 8 views
0

私は最近の同僚との討論で提起された質問があります。複数のテーブルとインデックス付きの行との比較

100,000,000行の表が1つあり、その行のそれぞれに索引付き列(varchar)があるとします。この列には1000の一意の値が存在するため、各値には100,000の行が関連付けられています。私は一意の値(私は上記の値を供給します)の1つに関連するすべての行を検索したいだけでなく、いくつかの追加のフィルタリングロジック(重要ではない)を求めます。

1000個の異なるテーブルに100,000行を格納するのが速く、遅くなる、または速くなるでしょうか。のみを検索するか、上記の方法を使用しますか?

すべてのテーブルが同じスキーマを持つと仮定します。

答えて

3

あなたが必要とするテーブルだけを洗う方が速くなります。書籍の章Xを検索するほうが速いのか、それとも章Xだけの本が与えられるのが速いのかという質問です。

しかし、これは誤っています。どのテーブルをクエリするかはどのように決定されますか? 1000 IFステートメント、またはIFステートメントのバイナリツリーを使用して、10ホップでそこに入ることができますか?あなたが何を書いても、私はそれらのいずれかが統合されたテーブルのインデックスを使用するよりも速くなるとは期待しません。

1000個のテーブルが混乱することは言うまでもありません。


は、パーティションのデータの引数(と時間&場所)がありますが、これは非常に悪い例です。

+0

+1また、クエリオプティマイザ**では、実際には多数のテーブルを持つクエリが嫌いです。 – Andomar

+2

また、同じ値_exactを100,000回繰り返している場合は、それを別のテーブルに引き出し、そのテーブルへの外部キー参照を作成することもできます。追加テーブルの追加コストは、** far **の文字列比較を処理する必要性が最も高いです。ガーアントードデータの整合性は素晴らしい副作用です。 (私はフィルタリングが文字列上にあると仮定していましたが、int比較は関係なくもっと良くなりましたか?) –

+0

@ X-Zero:1000個の異なる値を持つと、整数比較のパフォーマンス上の利点は、つまり、文字列を可能な限り識別子として使用しないようにすることは、まだ(現実的な)ベストプラクティスです。 – MatBailie

関連する問題