Die Indizierung von Sichten in SQL Server 2008

Ich habe eine Tabelle, die mehrere hundert Millionen Datenzeilen. Es gibt ein Feld namens EventId was ist ein integer-Feld.

Ich habe eine Reihe von unterschiedlichen Ansichten, die werden wieder nur Daten mit einer bestimmten Ereignis-id

Wenn ich eine Abfrage ausführen

SELECT TOP 1000 * FROM vw_MyView 

Dauert es 5 Minuten, um die Zeilen zurückzugeben, die. Was brauche ich, Indizes hinzufügen? Derzeit gibt es Indizes, die auf die master-Tabelle für den primary key (clustered auf LogId) und ein non-clustered auf EventId wie wird verwendet in der where-Klausel von jedem Blick.

Weiß ich Ansichten können indiziert werden, was field(s) sollte ich die Indizierung in der Ansicht? Sollte ich einfach den DB-Engine, Tuning Wizard, und sehen, was es sagt?

UPDATE nach dem feedback

Meiner master-Tabelle mit allen Daten drinnen ist, entlang der Linien von dem folgenden schema

LogId (int) PK
EventId (int)
Param1 varchar(255)
Param2 varchar(255)
..
..
..
Param24 varchar(255)

Jeder event-Typ hat unterschiedliche Parameter, daher die generische Feldnamen in der master-Tabelle.

Habe ich eine Ansicht für jede Art von Veranstaltung, wo die ParamX Felder in der master-Tabelle eine richtige Feld name durch die anzeigen.

So den Blick für ein event wäre so etwas wie

SELECT LogId, Param1 AS Name, Param2 AS Address1, Param3 AS Address2
WHERE EventId = 10

Ich habe versucht, die Abfrage

SELECT TOP 1000 LogId from vw_MyView 

und das klappte auch schnell. Es ist den anderen Feldern, die ihn verlangsamen, was ich davon ausgehen ist bis auf schlechte Indizierung?

UPDATE 2 - Mehr Infos

Zuvor die Daten für jedes Ereignis wurde in einer Tabelle gespeichert, die für jedes Ereignis. Dies bedeutete, dass das hinzufügen von neuen Ereignissen erfordern würde, eine neue Tabelle für jede.

Ich bin Massenimport von Daten in eine temp-Tabelle und verschieben, dass in meiner master-Tabelle. Die bulk-import macht es schnell, aber ich bin besorgt, dass eine so große master-Tabelle könnte bedeuten, dass die Abfrage es wird so langsam, dass es unbrauchbar ist.

Den Millionen von Zeilen von Daten ist über 10 Jahre oder so und so konnte ich vermutlich die ersten 8 Jahre von Daten in eine andere Datenbank für Archiv-Zwecke, so dass nur die letzten 2 Jahre aufbewahrt werden.

Ist also die Frage kann ich weiterhin mit der master-Tabelle Ansatz würde erfordern keine Wartung, aber potenziell viel von Indizierung, oder gehen Sie zurück auf die ursprüngliche Ansatz, mit einer Tabelle pro Veranstaltung?

Danke für das feedback Jungs, wirklich zu schätzen

  • Sie post müssen Sie die definition der Sicht und erläutern einige der Fragen, die Sie müssen ausführen von es. In der Regel Aussicht mehr Spalten enthalten, als nötig, um viele verschiedene Abfragen, in denen die Abfragen würde wahrscheinlich profitieren, besser von der Ausrichtung auf nur die relevanten Tabellen und Spalten direkt. Auch * und OBEN ohne ORDER BY nicht sind großartige Beispiele dafür, wie man wirklich mit dieser Ansicht. Bitte Lesen Sie diese und den Kommentaren: sqlblog.com/blogs/aaron_bertrand/archive/2010/03/07/...
  • Ich aktualisiert meine Antwort um zu zeigen, wie ich versuchen würde, sich mit der besonderen Ansicht, die Sie erwähnten.
InformationsquelleAutor Graeme | 2012-05-18
Schreibe einen Kommentar