|
|
|
Оптимизация запроса.
|
|||
|---|---|---|---|
|
#18+
Привет. Нужна помощь в оптимизации запрос. Таблица bigint | text | text | text | | int | int | bool | text | bigint | date | id | table_owner_id | user_id | app_id | creation_time | type | subtype | looked | parameters | grouped_type | creation_date| Запрос: SELECT creation_date, grouped_type, user_id, max(creation_time) , array_agg(id), array_agg(table_owner_id), array_agg(user_id), array_agg(app_id), array_agg(creation_time), array_agg(type), array_agg(subtype), array_agg(looked), array_agg(parameters) FROM table WHERE table_owner_id='owner' GROUP BY 1,2,3 ORDER BY 1 DESC, 4 DESC LIMIT 5 OFFSET 0; Индексы: "table_pkey" PRIMARY KEY, btree (id) "table_date_asc_grouped_type_user_id" btree (creation_date, grouped_type, user_id) "table_date_desc_grouped_type_user_id" btree (creation_date DESC, grouped_type, user_id) "table_feed_owner_idx" btree (table_owner_id) В таком виде индексы не используются (об этом говорит explain analyze) и запрос работает достаточно медленно (таблица 300к записей, время 2-4 сек). Если убрать max(creation_time) и ORDER BY 4 DESC - в этом случае работает индексы table_date_asc_grouped_type_user_id & table_date_desc_grouped_type_user_id (время выполнения - меньше 100 мс.), но результат группировки конечно же "ломается". Возможно ли каким то образом оптимизировать запрос (может добавить какие то вспомогательные колонки или еще что) с сохранением функционала? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2015, 14:37 |
|
||
|
Оптимизация запроса.
|
|||
|---|---|---|---|
|
#18+
indexrequest, Вы бы чтоли результаты explain analyze для обоих случаев привели. Что то я сомневаюсь что: авторЕсли убрать max(creation_time) и ORDER BY 4 DESC - в этом случае работает индексы table_date_asc_grouped_type_user_id & table_date_desc_grouped_type_user_id (время выполнения - меньше 100 мс.), но результат группировки конечно же "ломается". Ну и как ни делай всеравно вам все строки пересчитывать у которых table_owner_id='owner'. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2015, 15:25 |
|
||
|
Оптимизация запроса.
|
|||
|---|---|---|---|
|
#18+
Maxim Bogukindexrequest, Вы бы чтоли результаты explain analyze для обоих случаев привели. 1) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 2) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Что то я сомневаюсь что: авторЕсли убрать max(creation_time) и ORDER BY 4 DESC - в этом случае работает индексы table_date_asc_grouped_type_user_id & table_date_desc_grouped_type_user_id (время выполнения - меньше 100 мс.), но результат группировки конечно же "ломается". Ну и как ни делай всеравно вам все строки пересчитывать у которых table_owner_id='owner'. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2015, 16:01 |
|
||
|
Оптимизация запроса.
|
|||
|---|---|---|---|
|
#18+
Maxim Bogukindexrequest, Вы бы чтоли результаты explain analyze для обоих случаев привели. Что то я сомневаюсь что: авторЕсли убрать max(creation_time) и ORDER BY 4 DESC - в этом случае работает индексы table_date_asc_grouped_type_user_id & table_date_desc_grouped_type_user_id (время выполнения - меньше 100 мс.), но результат группировки конечно же "ломается". Ну и как ни делай всеравно вам все строки пересчитывать у которых table_owner_id='owner'. -- Maxim Boguk www.postgresql-consulting.ru есть конечно идея, если LIMIT 5 OFFSET 0 не будет, можно сперва отобрать эти 5 наборов: ( select creation_date, grouped_type, user_id where table_owner_id='owner' group by creation_date, grouped_type, user_id LIMIT 5 OFFSET 0 ) А потом их сджойнить с основной таблицей с целью получить loop join и немного поисков по индексу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2015, 16:09 |
|
||
|
Оптимизация запроса.
|
|||
|---|---|---|---|
|
#18+
index (table_owner_id,creation_date,creation_time) + идея ивана, в редакции примерно такой {псевдокод}: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2015, 17:46 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=109&tid=1997929]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
15ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 328ms |

| 0 / 0 |
