Ich schäme mich etwas, das zu fragen, da ich seit Jahren mit MySQL arbeite, aber naja.Mehrere und einzelne Indizes
Ich habe eine Tabelle mit zwei Feldern, a
und b
. Ich werde die folgenden Abfragen darauf ausgeführt werden:
SELECT * FROM ... WHERE A = 1;
SELECT * FROM ... WHERE B = 1;
SELECT * FROM ... WHERE A = 1 AND B = 1;
Von der Sicht der Performance, ist mindestens eine der folgenden Konfigurationen von Indizes langsamen für mindestens eine Anfrage? Wenn ja, bitte erläutern.
ALTER TABLE ... ADD INDEX (a); ALTER TABLE ... ADD INDEX (b);
ALTER TABLE ... ADD INDEX (a, b);
ALTER TABLE ... ADD INDEX (a); ALTER TABLE ... ADD INDEX (b); ALTER TABLE ... ADD INDEX (a, b);
Dank (beachten Sie, dass wir über nicht eindeutige Indizes sprechen)
Und gibt es einen Vorteil der Konfiguration # 3 statt # 1? –
Ja, es könnte ein Vorteil sein. Ein zusammengesetzter Index kann ein überdeckender Index werden, wenn alle Daten in der Abfrage im Index selbst enthalten sind. Im allgemeinen wird SELECT A, B VON ... WHERE A = 1; ', schneller, wenn es den zusammengesetzten Index auf' (A, B) 'verwendet, da die Abfrage keine Daten von der Tabelle abrufen muss . Die Daten sind bereits im Index. –
Denken Sie daran, dass Indizes Speicherplatz beanspruchen und bei Einfügungen und Aktualisierungen möglicherweise etwas Leistung beeinträchtigen. Ich würde mit Option 3 nur gehen, wenn Ihre Anwendung Abfragen ausführen wird, die den zusätzlichen Index rechtfertigen ... Tipps für einen abdeckenden Index: http://www.sql-server-performance.com/tips/covering_indexes_p1.aspx –