問題タブ [kotlin-exposed]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
517 参照

postgresql - Exposed with DataSource を Postgres で使用する場合、インデックスは使用されません

Exposed を DataSource で使用すると、予期しない動作に直面しています (Apache DBCP と HikariCP を試しました)。

セットアップ: 単一のテーブル ( test) とidflagのインデックスを持つフィールドflag

クエリ:SELECT * from test where flag=1 limit 1;

手動で実行すると、インデックスが使用され、クエリが高速になります。公開されたものを介して繰り返し実行すると、9 回の呼び出しの後、パフォーマンスが低下します。インデックスはもう使用されていません。以下のクエリ プランを参照してください。

コード例は次のとおりです。

出力:

EXPLAIN (ANALYZE, BUFFERS)有効にしたpostgresログは次のとおりです。

これは最後の高速クエリです。

そして、これが最初の「遅い」ものです。

Postgres バージョン (自作):

クライアントのバージョン:

postgres 構成がデフォルトです (ログは auto-explain で生成されますが、問題はそれなしで再現されます)

例のソースは次のとおりです: https://github.com/RomanBrodetski/kotlin-exposed-issue

所見:

  • が削除された場合.limit(1)、問題は再現されません
  • Database.connect("jdbc:postgresql://localhost:5432/testdb", driver = "org.postgresql.Driver")(の代わりに)データソースが使用されていない場合Database.connect(ds)、問題は再現されません。
  • トランザクションに追加のステートメントがある場合、問題は再現されません。