2009-05-07 3 views
1

Welchen Ansatz haben Sie beim Erstellen und Verwalten von Datenbankindizes bei der Verwendung von ORM, z. B. NHibernate/Hibernate?ORM- und Datenbankindizes

Da das ORM die Abfragen generiert, gibt es irgendwelche Tools, die Sie empfehlen könnten, die Abfragepläne dieser analysieren und die Art der Indizes vorschlagen, die erstellt werden sollten?

Mein aktueller Ansatz ist ... warten, bis etwas langsam funktioniert und dann finden Sie die langsame Abfrage und optimieren Sie es ... aber das ist irgendwie lahm, nicht wahr? Mein Ziel ist nicht, mit Dutzenden oder Hunderten von Indizes zu enden, von denen niemand weiß, welche tatsächlich vom System verwendet werden und welche nicht. Also nochmal Indexpflege.

Meine Umgebung ist NHibernate + SQL Server 2005.

Antwort

1

ich, dass die Spalten finden, die Indizierung brauchen sind in der Regel „offensichtlich“. Damit meine ich, wenn Sie Abfragen wie "wählen Sie p aus Person p, wo p.nachname =: Nachname" dann jede Spalte Nachname verwendet einen Index benötigt.

Ebenso sollte jeder Fremdschlüssel indiziert werden.

Und nein, ich warte nicht, bis die Leistung tatsächlich ein Problem ist. Indizes sind nur etwas, was ich von Anfang an mache.

Oh, die andere Sache, die ich hinzufügen wollte, war, dass die meisten (wenn nicht alle) ORMs die Möglichkeit haben, die Protokollierung von Anweisungen zu aktivieren. Diese sind oft nicht besonders lesbar (einfache Zeile, Tabellennamen von t0, t1, t2 usw.), aber dies könnte Ihnen sagen, welche Abfragen wie oft ausgeführt wurden.

+0

Wir haben ziemlich viele Abfragen und es macht keinen Sinn, Indizes für jedes "offensichtliche" Feld zu erstellen, da ich nicht Hunderte von Indizes in der Datenbank definieren lassen möchte. Was ich möchte, ist jedoch, Dinge zu indizieren, die eigentlich langsam sind, oder kombinierte Indizes zu verwenden, die für mehrere Abfragen dienen könnten, anstatt jede Abfrage einzeln zu optimieren. Alles aufgrund der Tatsache, dass jede Abfrage während der Ausführung nur einen Index pro Datenbank verwenden kann. –

+0

Es sollte einen Index pro Tabelle geben, sorry. –

0

Die Standardwerkzeuge, die Sie zum Analysieren langsamer Abfragen/schlechter Indexierung verwenden würden, gelten unabhängig davon, ob Sie ein ORM verwenden oder nicht. Sie können SQL Server Profiler verwenden, um die SQL-Anweisungen zu untersuchen, die gegen Ihre Datenbank ausgeführt werden und dann die Indexplan-Funktionen im Abfragefenster in SQL Server Management Studio/SQL Query Analyzer verwenden, um die Details Ihrer Abfragepläne zu sehen und eine Vorstellung davon zu bekommen Welche Indizes müssen Sie möglicherweise hinzufügen?

Sie können den Datenbankoptimierungsratgeber auch in sql management studio verwenden. Ob dieses Tool jedoch nützlicher ist als nur ein wenig Zeit mit dem Nachdenken über das Datenbankdesign und die Abfrage von Mustern zu verbringen, ist fraglich.

Verwandte Themen