Sie haben eine Situation, in der der zusammengesetzte Schlüssel aus zwei Komponenten besteht. Der erste ist 4 Bytes und der zweite 4 Bytes. Der Gesamtschlüssel beträgt 8 Bytes.
Ein Primärschlüssel-Index ist gruppiert, was bedeutet, dass die "Blätter" des B-Baums die eigentlichen Datensätze selbst sind. Auf einen gruppierten Index kann schneller zugegriffen werden als auf andere Arten von Indizes.
Ein Kriterium bei der Leistung eines Index ist die Größe des Schlüssels (sowie zusätzliche Spalten im Index). Ein Index mit einem 4-Byte-Schlüssel wird kleiner sein als ein Index mit einem 8-Byte-Schlüssel. Dies bedeutet weniger Festplattennutzung und weniger Speicherplatz im Speicher. Die Gewinne hier könnten jedoch ziemlich gering sein. Schließlich würden eine Million Zeilen in der Tabelle höchstens 10-20 Millionen Bytes entsprechen (Indizes haben zusätzliche Gemeinkosten in ihnen).
Eine weitere Überlegung ist die Durchführung von Datenmodifikationsschritten. In einem gruppierten Index erfordert das Einfügen/Ändern eines Schlüsselwerts in der Mitte einer Tabelle das erneute Schreiben der Datensätze selbst. Allerdings scheint die Adressänderung keine Frage zu sein.
Wenn Sie den Primärschlüsselindex bereits definiert haben, ist das Hinzufügen eines weiteren Indexes zusätzlicher Systemaufwand. Sie könnten feststellen, dass beide Indizes Speicher belegen, so dass Sie statt Speicherplatz sparen tatsächlich hinzufügen.
Letztlich ist die Antwort auf diese Art von ziemlich arkanen Frage, einige Timing-Tests zu tun. Wenn die B
Spalte viel, viel größer als die A
Komponente wäre, könnte ich möglicherweise einige Gewinne sehen. Für Abfragen, die nurA
verwenden, könnte ich möglicherweise einige Gewinne sehen. Ich vermute jedoch, dass solche Gewinne ziemlich gering wären.
Wenn Sie eine Suchanfrage nur auf A durchgeführt haben, würde ein Index für A und B nicht verwendet, afaik. – sevenseacat
@sevenseacat Sie besser über die am weitesten links Regel lesen :) –
klingt wie ich wahrscheinlich sollte. – sevenseacat