Имя: Пароль:
IT
Админ
Оптимизация запроса PostgreSQL 9.5
0 GANR
 
02.12.19
11:08
Не подскажете, как ускорить запрос в PostgreSQL 9.6, НЕ МЕНЯЯ его? 12 млн. записей, таблица весит около 40 Гб, использует JSONB.

SELECT * FROM svjul WHERE "data" ->> 'INN' = '7727383912'    
ORDER BY svjul.id ASC LIMIT 100 OFFSET 0

Сделал 2 индекса - все равное работает медленно:
CREATE INDEX idx_svjul_inn  ON svjul ((data ->> 'INN')
CREATE INDEX idx_svjul_id ON public.svjul ((id))
1 palsergeich
 
02.12.19
11:22
Тебе твои индексы при Select * никак не помогут, ибо за всеми полями все равно лезть в кластерный индекс.
Или ограничивай число полей и делай покрывающий или страдай дальше.
2 GANR
 
02.12.19
11:24
(1) поясните, пожалуйста, как понять "покрывающий"?
3 palsergeich
 
02.12.19
11:25
То что ты сделал 2 разных индекса на поле отбора и поле группировки это очень трогательно, но это немножко не так работает.
4 palsergeich
 
02.12.19
11:26
5 palsergeich
 
02.12.19
11:26
6 palsergeich
 
02.12.19
11:29
7 pechkin
 
02.12.19
11:31
(1) ты уверен что тормозит именно вытягивание строки таблицы?
8 palsergeich
 
02.12.19
11:32
(7) Йа на 99% уверен, что там все крутится в кластерном индексе и созданные индексы не изменили ничего.
9 pechkin
 
02.12.19
11:33
сколько в среднем записей на 1 ИНН?
10 GANR
 
02.12.19
11:38
(9) 1
11 H A D G E H O G s
 
02.12.19
11:50
Начнем с малого - кластерный индекс есть?
12 Бычий хрен
 
02.12.19
11:55
(11) в пиздгресе нет кластерных индексов вроде бы
13 ansh15
 
02.12.19
15:23
(0) Можно посмотреть в сторону параллельного выполнения запросов https://habr.com/ru/company/postgrespro/blog/352144/ , https://habr.com/ru/company/southbridge/blog/446706/
Понятно, что в этом случае будет нужно некоторое количество высокопроизводительных незанятых ядер и, желательно, достаточный размер оперативной памяти, чтобы и таблица в кэш СУБД помещалась и для всего остального хватало.
Лучше использовать PostgreSQL 11-й или 12-й редакций, там параллелизм(как пишут) значительно улучшен. В 9.6 он был в зачаточном состоянии.
14 ansh15
 
02.12.19
16:17
В 12-м вообще много чего улучшили https://habr.com/ru/company/southbridge/blog/466727/
Индексацию в том числе.
15 GANR
 
02.12.19
19:17
Всем спасибо. Переделал индекс вот так CREATE INDEX idx_svjul_inn_id ON public.svjul ((data ->> 'INN'), id); - запрос из (0) заработал быстро.
16 palsergeich
 
02.12.19
19:23
(15) Молодец, сделал покрывающий индекс и все вышло)
17 GANR
 
03.12.19
10:30
(16) А не подскажете чего бы почитать по PostgreSQL? Что-то куча книжек, а хороших мало - пускают в тираж всё что ни лень.