Poniżej znajduje się instrukcja SQL wewnątrz procedury przechowywanej (obcięty dla zwięzłości):MySQL WHERE NOT IN bardzo powolny
SELECT *
FROM item a
WHERE a.orderId NOT IN (SELECT orderId FROM table_excluded_item);
Stwierdzenie to trwa 30 sekund lub tak! Ale jeśli usunę wewnętrzne zapytanie SELECT, spadnie do 1s. table_excluded_item
nie jest ogromny, ale podejrzewam, że zapytanie wewnętrzne jest wykonywane bardziej niż musi.
Czy jest to skuteczniejszy sposób na zrobienie tego?
Zapytanie wewnętrzne jest zależnym podzapytaniem, które jest znanym wąskim gardłem, ponieważ podzapytanie jest uruchamiane w każdym wierszu zewnętrznego zapytania. Sprawdź [Optymalizowanie podzapytań] (http://dev.mysql.com/doc/refman/5.1/en/optimizing-subqueries.html) na stronie internetowej MySQL. – Anthony