Версия сервера Postgres: сервер 9.1.9
explain analyze
select * from A, B where A.groupid = B.groupid;
QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------- Merge Join (cost=1.23..8.64 rows=2 width=104) (actual time=0.076..204.212 rows=3 loops=1) Merge Cond: (A.groupid = B.groupid) -> Index Scan using A_pkey on A (cost=0.00..68144.37 rows=1065413 width=88) (actual time=0.008..115.366 rows=120938 loops=1) -> Sort (cost=1.03..1.03 rows=2 width=16) (actual time=0.013..0.016 rows=3 loops=1) Sort Key: B.groupid Sort Method: quicksort Memory: 25kB -> Seq Scan on B (cost=0.00..1.02 rows=2 width=16) (actual time=0.002..0.004 rows=3 loops=1) Total runtime: 204.257 ms (8 rows)
Таблица A содержит более 1 миллиона строк. Таблица B имеет 3 строки. В реальном производственном запросе есть другие предложения where в таблице A, которые уменьшают количество строк до 15 000+, но все равно запрос занимает более 50 мс и появляется в наших журналах медленных запросов.
Есть ли способ улучшить производительность здесь? Я предполагаю, что сканирование индекса на большей таблице вызывает медлительность.
where
. - person a_horse_with_no_name   schedule 04.02.2014