問題タブ [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.
postgresql - Exposed with DataSource を Postgres で使用する場合、インデックスは使用されません
Exposed を DataSource で使用すると、予期しない動作に直面しています (Apache DBCP と HikariCP を試しました)。
セットアップ: 単一のテーブル ( test
) とid
、flag
のインデックスを持つフィールド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)
、問題は再現されません。- トランザクションに追加のステートメントがある場合、問題は再現されません。