2009-04-06 14 views
0

J'ai un paquets de table
paquets contient 2 champs id et le total
ils sont à la fois la longueur bigint 20 et les clés primaires
seulement id est incrémentation automatique
dans chaque enregistrement total = id
j'ai obtenu 10000 enregistrements disons id = 1 - 10000 et total = 1 - 10000
Nested temps de chargement de sélection dans une base MySQL

J'ai 2 requêtes presque identiques 1 résultats dans un très très long temps de chargement et on se termine 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))

temps de chargement très court:

 
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.

Répondre

0

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) 
+0

Suppression de clé primaire et l'ajout d'un indice a conclu l'entente pour moi, je l'ai déjà été faire une solution de contournement pour une autre requête, l'autre requête a été faite en créant simplement un index. merci beaucoup pour votre réponse, il a vraiment fait l'affaire pour moi! –