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.

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top