我需要runnerId
的最小值。Postgres min函数性能
这个查询:
SELECT "runnerId" FROM betlog WHERE "marketId" = '107416794' ;
需要80毫秒(1968结果行)。
此:
SELECT min("runnerId") FROM betlog WHERE "marketId" = '107416794' ;
需要1600毫秒。
有没有更快的方法来找到最小值,或者我应该计算我的Java程序中的最小值?
"Result (cost=100.88..100.89 rows=1 width=0)"
" InitPlan 1 (returns $0)"
" -> Limit (cost=0.00..100.88 rows=1 width=9)"
" -> Index Scan using runneridindex on betlog (cost=0.00..410066.33 rows=4065 width=9)"
" Index Cond: ("runnerId" IS NOT NULL)"
" Filter: ("marketId" = 107416794::bigint)"
CREATE INDEX marketidindex
ON betlog
USING btree
("marketId" COLLATE pg_catalog."default");
另一个想法:
SELECT "runnerId" FROM betlog WHERE "marketId" = '107416794' ORDER BY "runnerId" LIMIT 1 >1600ms
SELECT "runnerId" FROM betlog WHERE "marketId" = '107416794' ORDER BY "runnerId" >>100ms
一个LIMIT
如何减缓查询下来?
你有marketid的索引吗? –
[找出声明执行这么长时间的原因是用EXPLAIN命令完成的](http://wiki.postgresql.org/wiki/Using_EXPLAIN) – raina77ow
是的,它有一个索引 – wutzebaer