Выберите… где foo_id в (выберите идентификатор из…) эффективность [закрыто
-
27-10-2019 - |
Вопрос
i) между этими двумя, что является более эффективным:
Select A.* from A, B where A.b_id = B.id
или же
Select A.* from A where A.b_id in (select id from B);
ii) Как Select A.* from A where A.b_id in (select id from B);
Действительно работать? Это внутри переводится в нечто вроде Select A.* from A, B where A.b_id = B.id
или есть (select id from B)
Оценивается для каждого ряда A?
Решение
Вы можете проверить эту короткую статью:http://www.mysqlperformanceblog.com/2010/10/25/mysql-limitations-part-3-subqueries/
Другие советы
Это более эффективно:
Select A.* from A, B where A.b_id = B.id
Да, Select A.* from A where A.b_id in (select id from B)
работает.
И нет, (select id from B)
не оценивается для каждой строки. Это оценивается только один раз.
Обычно соединения быстрее, чем использование IN
оператор.
Я не уверен, откуда берутся такие поддельные младшие, но вы должны присоединиться к таблицам, используя ON
, не масса, где в конце.
SELECT A.*
FROM A
INNER JOIN B ON (A.b_id = B.id)
Это зависит от различных факторов, включая версию MySQL, размер таблиц, наличие индексов и т. Д.
Вы должны попробовать выполнить EXPLAIN ...
, или даже лучше, если поддерживается, EXPLAIN EXTENDED ...
с последующим SHOW WARNIGS;
Чтобы попытаться понять, что делает MySQL.