分析查询postgres
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 index 来加速 ILIKE
条件:
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE INDEX ON player_cache USING gin (server_name gin_trgm_ops);
我在下面有一个查询,请问我需要做些什么才能将执行时间从 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 index 来加速 ILIKE
条件:
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE INDEX ON player_cache USING gin (server_name gin_trgm_ops);