2016-12-27 3 views
2

Ich arbeite in SQL und hat 26000 Tausende von Datensätzen in der Primärschlüssel SQL-Tabelle.SQL-Abfrage Leistung in JOIN

Mitarbeiter Tabelle Daten:

Id | Name | DepartmentId 
    -------------------------- 
    1 | AA | 1 
    2 | BB | 1 
    3 | CC | 2 

Departments Tabellendaten:

Id | Name  | 
---------------- 
1 | IT  | 
2 | Network | 

Erstellt Index für Employee.DepartmentId

I wie unten eine Frage haben,

Select E.Id, E.Name, E.DepartmentId 
from Employees E 
JOIN Department D 
ON E.DepartmentId = D.Id 

Die obige Abfrage wird in 2 Sekunden ausgeführt und gibt alle Datensätze zurück. , aber wenn ich den Abteilungsnamen in die Auswahlliste aufgenommen habe, dauert es ungefähr 10 Sekunden.

Select E.Id, E.Name, E.DepartmentId,D.Name 
from Employees E 
JOIN Department D 
ON E.DepartmentId = D.Id 

Was ist das Problem hier?

Vielen Dank im Voraus.

+2

Ich entfernte die inkompatiblen Datenbank-Tags. Bitte markieren Sie die Frage mit der Datenbank, die Sie wirklich verwenden. –

+0

ist Ihre 'DepartmentId' auf' Employees' indiziert? Denken Sie daran, dass Sie alle Datensätze auswählen und dass die zurückgegebenen Daten in JSON sehr groß sind und die Netzwerkgeschwindigkeit für die Übertragung der Daten berücksichtigen müssen. –

+1

** [Bearbeiten] ** Ihre Frage und fügen Sie den Ausführungsplan hinzu. [_Formatted_] (http://dba.stackexchange.com/help/formatting) Text bitte, [keine Screenshots] (http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload -images-of-code-on-so-wenn-Frage-Frage/285557 # 285557) –

Antwort

1

Für diese Abfrage:

select E.Id, E.Name, E.DepartmentId, D.Name 
from Employees E join 
    Department D 
    on E.DepartmentId = D.Id; 

Der optimale Index ist Department(Id, Name). Sie haben möglicherweise bereits im Wesentlichen diesen Index, wenn Department(Id) der Primärschlüssel ist.

Vielleicht ist ein wichtigeres Problem die Größe der Ergebnismenge. Der Name der Abteilung kann groß sein (insbesondere wenn sie als char() und nicht als varchar() deklariert ist). Das Problem kann einfach die Größe des Abteilungsnamens sein.

1

Wie von Gordon angedeutet, ist es nicht der Join auf den Tabellen mit den Indizes, sondern das Volumen der Daten, die in der Ergebnismenge (aus dem zusätzlichen Abteilungsnamen) zurückgegeben werden das Terminal oder in der Gui.

Darüber hinaus sollten Sie auch das Schlüsselwort EXPLAIN in MySQL verwenden können, um eventuelle Indexprobleme zu identifizieren.

Verwandte Themen