[英]analyze a query postgres
我在下面有一個查詢,我可以知道需要做什么才能將執行時間從 18 秒減少
查詢
SELECT DISTINCT ON (player_name) server_name, player_anme, logged_at, joined_at
FROM player_cache
WHERE server_name ILIKE '{query[0]}'
AND logged_at > (now() - interval '{history} hour')
ORDER BY player_name,logged_at desc;
執行計划
Unique (cost=14326.21..14326.25 rows=7 width=82) (actual time=18907.017..18907.049 rows=32 loops=1)
-> Sort (cost=14326.21..14326.23 rows=7 width=82) (actual time=18907.015..18907.023 rows=81 loops=1)
Sort Key: player_name, logged_at DESC
Sort Method: quicksort Memory: 36kB
-> Index Scan using idx_logged_at on player_cache (cost=0.56..14326.11 rows=7 width=82) (actual time=5.605..18906.463 rows=81 loops=1)
Index Cond: (logged_at > (now() - '30:00:00'::interval))
Filter: ((server_name)::text ~~* 'Server-1'::text)
Rows Removed by Filter: 79825
Planning Time: 0.665 ms
Execution Time: 18907.108 ms
您可以創建一個trigram 索引來加速ILIKE
條件:
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE INDEX ON player_cache USING gin (server_name gin_trgm_ops);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.