Это зависит; запустить их обоих, чтобы узнать; затем запустите «объяснение выбора» для объяснения.
Фактическая разница в производительности может варьироваться от «практически не существующей» до «довольно значительной» в зависимости от того, сколько строк в A с id = '12345' не имеет совпадающих записей в B и C.
Обновление (на основе опубликованных планов запросов)
Когда вы используете INNER JOIN, не имеет значения (с точки зрения результатов, а не с точки зрения производительности), с какой таблицы начинать, поэтому оптимизатор пытается выбрать ту, которая, по его мнению, будет работать лучше всего. Кажется, у вас есть индексы для всех соответствующих столбцов PK / FK, и у вас либо нет индекса на friend_events.userid
, либо слишком много записей с userid = '13006'
, и он не используется; в любом случае оптимизатор выбирает таблицу с меньшим количеством строк в качестве «базы» - в данном случае это zcms_users
.
Когда вы используете LEFT JOIN, имеет значение (с точки зрения результатов), с какой таблицы начинать; таким образом friend_events
выбрано. почему так меньше времени, я не совсем уверен; Я предполагаю, что friend_events.userid
условие помогает. Если вы добавите индекс (действительно ли это varchar, кстати? Не числовой?), Ваш INNER JOIN может вести себя по-другому (и стать быстрее).