У меня есть плоская таблица с ~ 4 миллионами строк и мультииндексом на 5 столбцов. Простые операторы select, которые возвращают примерно 150 строк x 5 столбцов, занимают примерно 700 мс. Я использую все 5 мультииндексных столбцов в фильтре where (в том же порядке, в котором они определены в самом индексе).

Это потолок постгреса? Время запроса приемлемо низкое, но я хотел бы сделать его еще меньше, если это возможно. Пылесос не помогает (автопылесос все равно позаботится об этом с 1000+ запусков за последние 2 месяца).

Объясните план возврата:

Index Scan using agg_data_level_idx on agg_data_level  (cost=0.56..8.58 rows=1 width=25)

Объяснение (анализ, буферизация, форматирование текста) возвращает:

explain (analyze, buffers, format text) select planning_group_name, phone, email, chat from agg_data_level
where planning_group_name = 'French'
and region_name = 'Europe'
and country_name = 'Russia'
and business_name = 'Main'
and schedule_day_lcl_skey = '20191128';

Возврат

Index Scan using agg_data_level_idx on agg_data_level  (cost=0.56..8.58 rows=1 width=25) (actual time=0.051..0.287 rows=144 loops=1)
  Index Cond: (((planning_group_name)::text = 'French'::text) AND (schedule_day_lcl_skey = 20191128) AND ((region_name)::text = 'Europe'::text) AND ((country_name)::text = 'Russia'::text) AND ((business_name)::text = 'Main'::text))
  Buffers: shared hit=16
Planning time: 0.083 ms
Execution time: 0.309 ms
0
Bishonen_PL 29 Ноя 2019 в 16:27
Запрос занимает менее 0,5 миллисекунд...
 – 
Laurenz Albe
29 Ноя 2019 в 16:41
Извините, если я что-то неправильно истолковал: я использую datagrip, и вкладка служб возвращает время после каждого запроса — этот всегда составляет около 700 мс. Сама консоль показывает еще одно число: [2019-11-29 14:41:59] 144 строки извлечены, начиная с 1, за 129 мс (выполнение: 117 мс, выборка: 12 мс)
 – 
Bishonen_PL
29 Ноя 2019 в 16:43
2
Накладные расходы во время выполнения явно вызваны DataGrip или сетью, а не Postgres. План выполнения показывает время выполнения на сервере без каких-либо сетевых обращений или время, необходимое клиенту для извлечения, обработки и отображения данных.
 – 
a_horse_with_no_name
29 Ноя 2019 в 16:50

1 ответ

Да, в это время запроса не только очистить запрос

Что также входит:

- DataGrip operations like fetching etc.
- JDBC Driver's operations
- Network time
0
moscas 1 Дек 2019 в 19:12