Nested Auswahl Ladezeit in mysql
Frage
Ich habe eine Tabelle Pakete
Pakete enthält zwei Felder id und insgesamt
sie sind beide Bigint Länge 20 und Primärschlüssel
nur id ist Autoinkrement
in jedem Datensatz Gesamt = id
Ich habe 10000 Aufzeichnungen sagen wir mal, id = 1-10.000 und gesamt = 1-10.000
Ich habe 2 fast identische Anfragen 1 führt zu einer sehr sehr langen Ladezeiten und ein vervollständigt fast sofort.
sehr sehr lange Ladezeit:
set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.total in ( SELECT p2.total
FROM packets as p2 where ( ( @i := ( @i + 1 ) )
sehr kurze Ladezeit:
set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.id in ( SELECT p2.id
FROM packets as p2 where ( ( @i := ( @i + 1 ) )
In diesem Fall, während die Werte von id und insgesamt identisch sind.
Lösung
Sie sind beide Bigint Länge 20 und Primärschlüssel
Sie können nicht zwei Primärschlüssel in einer Tabelle haben.
Es scheint, dass Sie nicht über einen Index auf packets.total
haben
Erstellen Sie es und sehen, ob es hilft:
CREATE INDEX ix_packets_total ON packets (total)