2016-05-25 10 views
0

Ich versuche zu verstehen, wird es einen Leistungseinfluss geben, wenn ich Table1 wie in Table2 stapeln? Was ist besser für die Leistung?SQL-Leistung mit dem Stapeln

Abfrage # 1:

SELECT * 
FROM TABLE1 
WHERE ID = 100 

Output:

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

Abfrage # 2:

SELECT * 
FROM TABLE2 
WHERE ID = 100 

Output:

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 

Wie scannt SQL Server die Datensätze?

Dank

+0

Was Sie tun, ist Anruf [** UNPIVOT **] (https://technet.microsoft.com/en-us/library/ms177410 (v = sql.105) .aspx? F = 255 & mspperror = -2147217396). Jeder hat Gebrauch. Tabelle 2 wird größer sein, aber mit dem richtigen Index wird eine ähnliche Leistung haben. –

+0

Wenn Sie nur zwei Bedingungen (Daten von 1 oder 2) festgelegt haben, müssen Sie nicht UNPIVIOT tun, weil Sie nur selbst ID und Daten beitreten können. –

+0

Das ist ein bisschen komisch, dass es keinem anderen Teil Ihres Systems egal ist, ob es mehrere Zeilen oder mehrere Spalten in der Ergebnismenge gibt. –

Antwort

1

Tabelle 1 normiert ist, während 2-Tabelle als EAV ausgebildet ist, die als Anti-Muster betrachtet wird, und mit gutem Grund.

Und während ich glaube, dass die Leistung wäre besser mit Tabelle 1,
Es gibt einige andere Faktoren, die hier neben der Leistung berücksichtigt werden.

IMHO, der einzige gute Grund, ein EAV-Design zu wählen, ist, wenn Sie keine andere Wahl haben. (Und das ist selten der Fall, da die meisten Datenbanken heute komplizierte Datentypen wie XML oder JSON verarbeiten können). In diesem Fall ist die Wahl ziemlich offensichtlich - Tabelle 1 hat ein besseres Design, keine Frage.