slick 3.3.2 не присоединяется при явном написании запроса на соединение

Я пытаюсь соединить две таблицы с slick 3.3.2 и играть в 2.7.x, но мне трудно понять, почему мои коды не делают то, что я хочу.

У меня две таблицы:Foo а такжеBar , оба со строкой, которую мне нужно присоединить к строковому столбцу, позвольте называть ееfooBar

val innerJoin = for {
  (f, b) <- Foo join Bar on (_.fooBar === _.fooBar)
} yield (f, b)
db.run(innerJoin.result)

Документы говорят, что это способ сделать это:http://scala-slick.org/doc/3.3.2/queries.html#applicative-joins

Но гладкий запрос, созданный при отладке, на самом деле не использует соединение, он просто выбирает свойства из двух таблиц, например: (упрощенно)select * from Foo, Bar where (x2.fooBar = x3.fooBar) пункт

Что здесь происходит?

# playframework slick
Источник
Codelisting
за 0 против

Slick сгенерировал там соединение, но в форме, известной как «неявное соединение» (в SQL).

Это разница в синтаксисе, и вы можете проверить в документации по базе данных, будет ли оптимизатор запросов обрабатывать их одинаково.

Как правило, я бы не стал беспокоиться о поверхностном тексте SQL, который генерирует Slick, если только нет проблем с производительностью, которые вы можете определить, профилировав план запроса в своей базе данных.

  • 0
    Таких (проблем с производительностью) очень много, как только вы начинаете писать что-то еще, кроме простых выборок из одной таблицы, поэтому я хочу, чтобы Slick не вел себя как сумасшедший. Вместо этого я решил использовать простой старый SQL, так как его намного проще писать, читать, понимать и в целом намного быстрее. С некоторыми тестами производительности можно выиграть сотни миллисекунд, заменив даже простые гладкие запросы, которые в основном просто select * from table where x = x , на простой sql того же самого оператора SQL, который slick генерирует под капотом. Спасибо за ответ.
Codelisting
Популярные категории
На заметку программисту