Чтобы расширить ответ @ Femi:
Нет хорошего способа ограничить JOIN
, и, на самом деле, вы на самом деле этого не хотите. Предполагая, что и у products_image.product_id
, и у products.id
есть индексы (и они абсолютно необходимы, если вы собираетесь объединяться с ними неоднократно), когда ядро базы данных выполняет соединение, оно использует индексы, чтобы определить, какие строки ему нужно выбрать. Затем механизм использует результаты, чтобы определить, где на диске найти нужные записи. Если вы
Вы сможете увидеть разницу, запустив следующие операторы SQL:
EXPLAIN
SELECT p.product_id, p.product_name, i.img_name, i.img_ext
FROM products p
LEFT JOIN products_images i
ON i.product_id = p.product_id
вместо:
EXPLAIN
SELECT p.product_id, p.product_name, i.img_name, i.img_ext
FROM (SELECT product_id, product_name FROM products) p
LEFT JOIN (SELECT img_name, img_ext FROM products_images) i
ON i.product_id = p.product_id
Первый запрос должен иметь индекс, а второй - нет. Должна быть разница в производительности, если в базе данных имеется значительное количество строк.