Qui di seguito è una dichiarazione di SQL all'interno di una stored procedure (troncato per brevità):MySQL DOVE NON estremamente lento
SELECT *
FROM item a
WHERE a.orderId NOT IN (SELECT orderId FROM table_excluded_item);
Questa affermazione richiede 30 secondi o giù di lì! Ma se rimuovo la query SELECT interna, scende a 1s. table_excluded_item
non è enorme, ma sospetto che la query interna sia eseguita più di quanto debba essere.
Esiste un modo più efficiente per farlo?
La query interna è una sottoquery dipendente, che è un noto collo di bottiglia perché la sottoquery viene eseguita su ogni riga della query esterna. Controlla [Ottimizzazione sottoquery] (http://dev.mysql.com/doc/refman/5.1/en/optimizing-subqueries.html) sul sito dev MySQL. – Anthony