11

私は単純化したい問題に直面しています:(確かに、私は実際にそれを間違っています)。

募集

id = 1のユーザーの数を数えたいと思います。SQL言語では、次のようになります。

SELECT COUNT(*) FROM users WHERE id = 1

コード

「リフト」形式でSlickを使用しているので、ユーザーをカウントするコードを次に示します。

Query(Users.where( _.id === 1).length).first

実際にここで行われるのは、SlickエイリアスScalaQueryが実際にフィルターの原因を使用してサブクエリを作成し、サブリクエストの結果をカウントしていることです。

SELECT COUNT(*) FROM (SELECT * FROM users WHERE id = 1))

このようなクエリのオーバーヘッドはかなり大きいようです。

4

1 に答える 1

9

これが ScalaQuery から Slick に変更されたかどうかはわかりませんが、試してみてください。

val q = for{ 
  id <- Parameters[Int]
  t <- tableObject if t.id is id
} yield t.id.count

val cnt = q(someID).firstOption getOrElse 0
于 2012-10-12T16:01:07.140 に答える