
Originariamente inviata da
MySQL
IO sì

In questo caso si sta parlando specificamente di MySQL, che per molto tempo non ha avuto un materializzatore delle subquery dipendenti. In sostanza invece di creare una lista di chiavi (nella subquery) per poi eseguire il ciclo esterno (quindi complessità n * 1), eseguiva ogni volta la subquery, quindi complessità n*m (in realtà anche più perchè le chiave per iN in mysql vengono sortate)
Bene questo è un problema noto e stranoto: le versioni più moderne (credo dalla 5.6 in poi), e mariadb, usano strategie più efficienti, tanto che oggi è difficile dire a priori quale sia meglio (IN o JOIN).
Siccome, però, spesso gli host a basso costo usano versioni mysql non aggiornate (5.1 anche) il modo migliore è fare un explain della select per vedere cosa succede, o fare una rapida ricerca per vedere se la versione specifica gestisce in modo furbo questo tipo di interrogazioni.
Il perchè ciò accada, ed accadesse, è relativo alla possibilità di avere interferenze "strane" durante l'esecuzione, uso di funzioni, stored, transazioni pendenti e abortite e così via.
Per non sbagliare mysql vecchio... ricalcola ogni volta la subquery e buonanotte, è sicuro che i dati siano giusti