EXPLAIN SELECT node_id
FROM node
WHERE person_id IN (SELECT person_id
FROM user
WHERE is_locked = 0);
Resultados en MySql que me dicen que la subconsulta se deriva. ¡Pero no lo es!¡MySQL cree que la subconsulta se deriva cuando no lo es!
(sé que esto podría fácilmente ser re-escrita como una combinación, pero quiero saber por qué MySQL piensa que esto es una sub consulta dependiente.)
No soy experto en MySQL, pero he leído a varias personas que están aquí en Stackoverflow afirman que MySQL tiene un punto ciego en su optimizador de consultas exactamente en esta situación. –
+1 Porque MySQL es realmente malo para detectar una subconsulta dependiente y no hay nada que puedas hacer al respecto. – AndreKR
En mi comprensión de los términos, la sub-selección se deriva (una tabla resultante se deriva de la consulta) pero no correlacionada (la subconsulta no utiliza ningún dato desde fuera de sí misma), también conocida como dependiente. Eso significa que solo debe ejecutarse una vez, no una vez por fila. – RedFilter