Множественный выбор таблицы против JOIN (производительность)

При выборе из нескольких таблиц в MySQL оба этих запроса возвращают один и тот же набор результатов.

Является ли один из этих запросов лучше или эффективнее другого? Из моего тестирования на небольшом наборе данных (~ 2 тыс. Строк в каждой таблице) оба они возвращают один и тот же результирующий набор примерно в течение одного и того же времени выполнения.

Запрос 1:

SELECT
    *
FROM
    products,
    product_meta,
    sales_rights
WHERE 
    (
        products.id = product_meta.product_id
        AND products.id = sales_rights.product_id
    )
    AND (...)
LIMIT 0,10;


Запрос 2:

SELECT
    *
FROM
    products
INNER JOIN product_meta ON products.id = product_meta.product_id
JOIN sales_rights ON product_meta.product_id = sales_rights.product_id 
WHERE
    (...)
LIMIT 0,10;

Ответ 1

Они те же, но с другим синтаксисом. Поэтому вы не должны ожидать разницы в производительности между двумя синтаксисами. Однако последний синтаксис (синтаксис ANS SQL-92) рекомендуется, см. Их для более подробной информации:

Ответ 2

Я думаю, что этот поток дает отличное объяснение.

INNER JOIN - это синтаксис ANSI, который вы должны использовать.

Обычно считается более читаемым, особенно когда вы присоединяетесь много таблиц.

Он также может быть легко заменен OUTER JOIN при необходимости возникает.

Синтаксис WHERE больше ориентирован на реляционную модель.

Результатом двух таблиц JOIN'ed является декартово произведение таблиц на который применяется фильтр, который выбирает только те строки с присоединением сопоставление столбцов.

Легче видеть это с синтаксисом WHERE.

Что касается вашего примера, то в MySQL (и в SQL вообще) эти два запроса являются синонимами.

Также обратите внимание, что MySQL также имеет предложение STRAIGHT_JOIN.

Используя этот раздел, вы можете управлять порядком JOIN: какая таблица сканируется во внешнем цикле и находится во внутреннем цикле.

Вы не можете управлять этим в MySQL с помощью синтаксиса WHERE.