Heim  >  Artikel  >  Datenbank  >  Was sollten Sie bei der Verwendung verwandter Abfragen in MySQL beachten?

Was sollten Sie bei der Verwendung verwandter Abfragen in MySQL beachten?

PHPz
PHPznach vorne
2023-05-28 15:17:301022Durchsuche

1. Stellen Sie sicher, dass die Spalten in den Klauseln ON und USING Indizes enthalten.

Beim Erstellen eines Index müssen Sie die Reihenfolge der Assoziationen berücksichtigen. Wenn Tabelle A und Tabelle B mithilfe von Spalte c verknüpft sind und die Zuordnungsreihenfolge des Optimierers A, B lautet, muss kein Index für die entsprechende Spalte von Tabelle A erstellt werden. Nicht verwendete Indizes stellen eine zusätzliche Belastung dar. Sofern keine anderen Gründe vorliegen, müssen Sie nur Indizes für die entsprechenden Spalten der zweiten Tabelle in der Assoziationssequenz erstellen.

2. Stellen Sie sicher, dass alle Ausdrücke in GROUP BY und ORDER BY nur Spalten in einer Tabelle betreffen, damit MySQL Indizes zur Optimierung verwenden kann.

Beispiel

Angenommen, MySQL führt Assoziationsoperationen gemäß der Assoziationsreihenfolge A und B in der Abfrage aus, dann kann der folgende Pseudocode verwendet werden, um darzustellen, wie MySQL diese Abfrage abschließt:

outer_iterator = SELECT A.xx,A.c FROM A WHERE A.xx IN (5,6);
 
outer_row = outer_iterator.next;
 
while(outer_row) {
 
    inner_iterator = SELECT B.yy FROM B WHERE B.c = outer_row.c;
 
    inner_row = inner_iterator.next;
 
    while(inner_row) {
 
        output[inner_row.yy,outer_row.xx];
 
        inner_row = inner_iterator.next;
 
    }
 
    outer_row = outer_iterator.next;
 
}  可以看到,最外层的查询是根据A.xx列来查询的,A.c上如果有索引的话,整个关联查询也不会使用。再看内层的查询,很明显B.c上如果有索引的话,能够加速查询,因此只需要在关联顺序中的第二张表的相应列上创建索引即可。

Das obige ist der detaillierte Inhalt vonWas sollten Sie bei der Verwendung verwandter Abfragen in MySQL beachten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen