На работе я наткнулся на этот вид запроса:Cross Присоединяйтесь гораздо быстрее, чем внутреннее соединение
select distinct psv.pack_id from pack_store_variant psv, pack p
where p.id = psv.pack_id and p.store_id = 1 and psv.store_variant_id = 196;
Будучи новым для select from table1, table2
я сделал немного поиска и узнал, что это делает в основном декартово произведение двух столы. Я думал, что это необязательно создает строки NxM, мы можем просто использовать регулярное соединение, и оно должно работать. Так что я написал этот вопрос:
SELECT DISTINCT pack_id from (SELECT pack_id, store_id, store_variant_id
FROM pack JOIN pack_store_variant ON pack.id = pack_store_variant.pack_id) as comb
where comb.store_id = 1 AND comb.store_variant_id = 196;
Удивительно, когда я сделал сравнение, первый был на порядок быстрее, чем мой. Мой вопрос как-то сосать? Или я не понимаю разницу между кросс-соединением/внутренним соединением должным образом?
Значит, в вашем запросе, где сделано вместе с объединением в одном цикле? – hoodakaushal
@hoodakaushal Да. Производительность должна быть лучше, чем перекрестное соединение, но я не на это 100%. –
Оказывается, это не так. Вы выполняете запрос быстрее, чем мой, но не последовательно быстрее, чем перекрестное соединение - оба находятся в пределах нескольких мс друг от друга, но не всегда быстрее. Я решил оставить его в покое. – hoodakaushal