2016-05-18 11 views
0

Ich arbeite derzeit an einem System, das Fehlerprotokollierung behandelt, und derzeit 90% (etwa ~ 9 000 000 von ~ 10 000 000) der Protokollposten sind Diagnosemeldungen, die kaum verwendet werden. Die verbleibenden sind tatsächliche Fehler, die behandelt werden müssen. Die beiden Arten von Protokollen enthalten meistens die gleiche Art von Informationen und unterscheiden sich ein wenig durch einen nicht gruppierten Index. Ich überlege, die Diagnosemeldungen in eine separate Tabelle zu verschieben, aber ich bin mir nicht sicher, ob es sich lohnt.Mit zwei Tabellen oder einem

Heute wird das System nicht ausgiebig genutzt, aber es könnte sich in der Zukunft ändern, und ich mache mir Sorgen über die Auswirkungen der Menge an Diagnosemeldungen, die sich auf die Leistung auswirken könnten. Welche Vor-/Nachteile könnte ich erwarten, wenn ich eine neue Tabelle für die Protokollierung erstelle? keeping -

Antwort

0

SQL Server (zumindest ab 2008 R2-Version) können Sie create non-clustered filtered indexes.
Also, wenn Sie nur die Zeilen der Auswahl verbessern wollen, wo die Bit Spalte einen bestimmten Wert enthält, können Sie einen gefilterten Index auf dieser Spalte verwenden Dein Index ist so klein wie möglich und die Suche ist so effektiv wie möglich.

Alles, was Sie tun müssen, ist eine where Klausel zu Ihrem Index hinzu:

CREATE NONCLUSTERED INDEX <IndexName> 
ON <TableName> (<columnsList>) 
WHERE <bitColumn> = 1 ; 

Natürlich müssen Sie alles in den <> zu tatsächlichen Namen ersetzen.

+0

Eine Bitspalte (mit den Werten 0 oder 1) hat keine geringe Selektivität? Wenn ich mich richtig erinnere, würde ein Index helfen, wenn eine hohe Selektivität vorliegt (+ 70%). Gefilterte Indizes funktioniert anders? – shadow