|   |   | 
| 
 | Оптимизация запроса 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? Что-то куча книжек, а хороших мало - пускают в тираж всё что ни лень.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |