Выберите… где foo_id в (выберите идентификатор из…) эффективность [закрыто

StackOverflow https://stackoverflow.com/questions/8359092

Вопрос

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top