Emboîtée sélection temps de chargement dans une base MySQL
Question
J'ai un paquets de table
paquets contient 2 champs id total et
ils sont à la fois la longueur de bigint 20 et les clés primaires
seulement id est incrémentation automatique
dans tous les id = total de dossier
J'ai 10000 enregistrements disons id = 1-10000 et total = 1 - 10000
i reçu 2 requêtes presque identiques 1 résultats dans un temps de chargement très très longue et on complète presque instantanément.
très très long temps de chargement:
set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.total in ( SELECT p2.total
FROM packets as p2 where ( ( @i := ( @i + 1 ) )
très peu de temps de chargement:
set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.id in ( SELECT p2.id
FROM packets as p2 where ( ( @i := ( @i + 1 ) )
cela se produit alors que les valeurs de id et au total sont identiques.
La solution
ils sont à la fois la longueur bigint 20 et les clés primaires
Vous ne pouvez pas avoir deux clés primaires dans une table.
Il semble que vous ne disposez pas d'un index sur packets.total
Créer et voir si elle aide à:
CREATE INDEX ix_packets_total ON packets (total)