Indizieren einzelner Felder von SQL Server-Verbundschlüsseln

8

Ich erweitere eine Jet-Datenbank auf SQL Server Express 2008 R2, und bevor ich das tue, überarbeite ich das Schema (es wurde 1997-98 entworfen, und der Typ, der es entworfen hat, war ich) etwas von einem Idioten!).

Meine Frage bezieht sich auf N: N Join-Tabellen mit einem zweispaltigen zusammengesetzten Schlüssel. In Jet werden Joins in der ersten Spalte eines zweispaltigen zusammengesetzten Schlüssels den zusammengesetzten Index verwenden, aber Joins in der zweiten Spalte werden nicht verwendet, also im Allgemeinen in Jet-Datenbanken mit großen N: N-Join-Tabellen mit einer relativ großen Anzahl von Datensätzen Zusätzlich zu dem zusammengesetzten Index füge ich einen zweiten, nicht eindeutigen Index für die zweite Spalte hinzu.

Ist das eine gute Idee in SQL Server?

(Vielleicht ist es keine gute Idee in Jet?)

    
David-W-Fenton 31.08.2010, 20:46
quelle

3 Antworten

14

In SQL Server gelten dieselben Regeln. Wenn Sie einen Index für (ColumnA, ColumnB) haben, kann eine Abfrage für nur ColumnA oder ColumnA und ColumnB zusammen den Index verwenden, eine Abfrage für ColumnB jedoch nicht. Wenn Sie nur ColumnB beitreten müssen, sollten Sie unbedingt den Index erstellen.

    
Joe Stefanelli 31.08.2010, 20:55
quelle
5

Wenn Sie einen zusammengesetzten Index für die Spalten (A,B) no seek, Bereichsüberprüfung, Sortier- oder Aggregatoperation verwenden, können Sie ihn für Ausdrücke verwenden, die nur B enthalten. Dies gilt für SQL Server genauso wie für Jet (Red) Treiber (und ich denke für Jet Blue < (a) auch). Einige andere Suchmaschinen verwenden sie möglicherweise in einer so genannten skip scan -Operation.

Die Antwort ist also, dass Sie nur für (B) separate Indizes benötigen.

    
Remus Rusanu 31.08.2010 20:58
quelle
4

Um Ihnen mehr zu helfen, nur ein Tipp, in SQL-Server mit dem Managment Studio können Sie die Leistung von "Geschätzten Ausführungsplan anzeigen" bewerten. Es zeigte, wie die Indizes und Joins funktioniert.

Sie können auch den DTA (Database Engine Tuning Advisor) für weitere Informationen und Optimierung verwenden.

    
Luka Milani 31.08.2010 21:09
quelle