2016-05-25 14 views
0

Table2のようにスタックすると、パフォーマンスに影響が及ぶかどうかを確認しようとしていますか?パフォーマンスはどれが良いですか?スタッキングを使用したSQLパフォーマンス

クエリ#1:

SELECT * 
FROM TABLE1 
WHERE ID = 100 

出力:

ID col1 col2 
------------- 
100 1 0 
200 0 1 
300 1 0 
400 0 1 

クエリ#2:

SELECT * 
FROM TABLE2 
WHERE ID = 100 

出力:

ID col data 
---------------- 
100 col1 1 
100 col2 0 
200 col1 0 
200 col2 1 
300 col1 1 
300 col2 0 
400 col1 0 
400 col2 1 

また、SQL Serverはレコードをスキャンしますか?

おかげ

+0

何をしているのですか?[** UNPIVOT **](https://technet.microsoft.com/en-us/library/ms177410(v = sql.105).aspx?f = 255&mspperror = -2147217396) )。それぞれには使い方があります。表2は大きくなりますが、適切なインデックスを使用すると同様のパフォーマンスが得られます。 –

+0

2つの条件(1または2のデータ)を固定したばかりの場合、UNPIVIOTを実行する必要はありません。IDとデータを自己結合するだけでよいからです。 –

+0

これは、システムの他の部分が結果セットに複数の行またはいくつかの列があるかどうか気にしないというのは少し奇妙です。 –

答えて

1

表1表2は、アンチパターンとして、そして正当な理由と考えられるEAVとして設計されている、正規化されています。

そして、私はパフォーマンスが表1より良いと信じていますが、
パフォーマンス以外にも考慮すべきいくつかの要因があります。

IMHO、EAVデザインを選択する唯一の理由は、他に選択肢がない場合です。 (そして今日はほとんどのデータベースがXMLやJSONのような複雑なデータ型を扱うことができるので、それはまれです)この場合、選択肢は非常に明白です。

関連する問題