2010-10-13 27 views
1

Voici extrait très simple de SQL échoue:MySQL temps de déclaration UPDATE sur

UPDATE smalltable,bigtable 
SET smalltable.ssn=bigtable.ssn 
WHERE smalltable.last = bigtable.last && smalltable.first = bigtable.first; 

BigTable 16.000 records - pas vraiment tout ce que grand pour SQL. smalltable a environ 300. Pour une raison quelconque, cette déclaration expire (> 30 secondes). Pourquoi? Cela semble très simple, et les données ne sont pas difficiles à travailler: pas beaucoup de répétitions, de champs courts (VARCHAR (20)), etc.

Est-ce que je fais quelque chose de mal? J'essaye juste de mettre à jour les disques dans smalltable avec une recherche simple (ou si j'ai pensé) dans le bigtable.

Éditer: Très pertinent: smalltable est un LOCAL INFILE.

+0

Pouvez-vous poster créer une table pour smalltable et BigTable? Il semble que vous n'ayez pas d'index sur les colonnes de jointure (premier et dernier). – a1ex07

+0

bigtable a beaucoup d'enregistrements non pertinents (175 au total), mais les clés sont le dernier et le premier qui sont VARCHAR (20) et ssn qui est VARCHAR (16). smalltable a exactement ces trois champs. – Charles

Répondre

5

Avez-vous des indices sur:

smalltable.last, bigtable.last, smalltable.first, bigtable.first 
+1

Doh! Nuked ma réponse; celui-ci est meilleur. +1 –

+0

Ce n'était pas ma base de données, donc j'ai pensé qu'il était déjà configuré avec des index, au moins sur les tables importantes comme bigtable. Non, ce n'était pas! Maintenant, MySQL rapporte qu'il a fallu 0,000 secondes. – Charles