2010-11-25 4 views
5
EXPLAIN SELECT node_id 
      FROM node 
     WHERE person_id IN (SELECT person_id 
           FROM user 
           WHERE is_locked = 0); 

Результаты в MySql, сообщающие мне, что этот подзапрос получен. Но это не так!MySQL считает, что подзапрос получен, когда он не является!

(я знаю, что это может быть легко переписан как JOIN, но я хочу знать, почему MySQL считает, что это зависит от подзапроса.)

+1

Я не эксперт по MySQL, но я прочитал несколько человек, которые находятся здесь, в состоянии Stackoverflow, что MySQL точно слепает в своем оптимизаторе запросов именно в этой ситуации. – 2010-11-25 15:47:39

+0

+1 Потому что MySQL действительно плохо обнаруживает зависимый подзапрос, и вы ничего не можете с этим поделать. – AndreKR 2010-11-25 15:48:27

ответ

3

Это ошибка в MySQL Query Optimizer. Казалось бы, если таблица в подзапросе соответствует таблице в основном запросе, она считается зависимым подзапросом, даже если этого явно не должно быть, и нет простого исправления. Сожалею; пойдите для соединения.

Смежные вопросы