新しい開発では、大きなSQLテーブル(〜100M行)を使用します。 4つのフィールドがデータのクエリに使用されます。Sqlパフォーマンスの場合、複数の等しいか1つの間
1つの連結フィールドを複数の等価で照会する方が良いですか?
Exemple:Fkのテーブルで
MainTable
PkId | Label | FkId1 | FkId2 | FkId3 | FkId4 1 | test | 1 | 4 | 3 | 1
DATASは、例えば静的である:
FkTable1
Id | Value 1 | a 2 | b 3 | c
DATASを照会するために、古典的なSQLクエリです。
性能を最適化するselect Label, FkId1, FkId2, FkId3, FkId4
from MainTable
where FkId1=1 and FkId2=2 and FkId3 in(2, 3)
アイデアは、挿入する前に、一つのフィールド「ユニークID」を算出バックエンドを追加することである。
UniqueId = FkId1*1000000 + FkId2*10000 + FkId3*100 + FkId4
PkId | Label | FkId1 | FkId2 | FkId3 | FkId4 | UniqueId 1 | test | 1 | 4 | 3 | 1 | 1040301
select Label, FkId1, FkId2, FkId3, FkId4
from MainTable
where UniqueId between 1020200 and 1040000
また、一意IDフィールドと、インデックスをこのフィールドにのみ十分でしょう。
あなたはどう思いますか?このクエリの
おかげ
FkId3の値が100の場合はどうなりますか?あなたのロジックはもはや機能しません。早すぎる最適化の罠に陥ってはいけません。まだ発生していないパフォーマンス問題を修正するために、非標準的な設計上の決定を下す寸前です。このような4列のキーには何も問題はありません。適切なテーブル構造を使用し、発生時にパフォーマンスの問題に対処してください。 –
同様に、(2,3)にFkId1が必要な場合はどうなるか考えてみてください。 –
@Sean Lange:時期尚早の最適化ではないので、現在のシステムデータで新しいシステムを設定します – twisted