Tempo selezione loading annidata in mysql
Domanda
Ho una tabella pacchetti
pacchetti contiene 2 campi ID e
totale
sono entrambi lunghezza bigint 20 e le chiavi primarie
solo id è incremento automatico
in ogni record totale = id
ho ottenuto 10000 record diciamo id = 1 - 10000 e totale = 1 - 10000
Ho ottenuto 2 quasi identiche interrogazioni 1 risultati in un tempo di caricamento molto molto lungo e una completa quasi istantaneamente.
tempi di caricamento molto molto lungo:
set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.total in ( SELECT p2.total
FROM packets as p2 where ( ( @i := ( @i + 1 ) )
tempo di caricamento molto breve:
set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.id in ( SELECT p2.id
FROM packets as p2 where ( ( @i := ( @i + 1 ) )
questo accade mentre i valori di id e totale sono identici.
Soluzione
entrambi siano lunghezza bigint 20 e chiavi primarie
Non è possibile avere due chiavi primarie in una tabella.
Sembra che non si dispone di un indice su packets.total
Crea e vedere se aiuta:
CREATE INDEX ix_packets_total ON packets (total)