Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Можно ли ускорить запрос
|
|||
|---|---|---|---|
|
#18+
Доброе утро. Есть таблица с пользователями user(id, name, reg_date, ...) кол-во строк, около 1 млн. Есть таблица с платежами purchase(id, user_id, date, ...) , кол-во строк около 150 тыс. есть запрос, который выбирает всех пользователей, которые когда-либо платили: Код: sql 1. 2. 3. 4. В плане выполнения вижу seq scan по всей таблице purchase . Если посмотреть кол-во пользователей без exists , которые отбираются по фильтру user.reg_date::date between '2016-02-01' and '2016-03-01' , то их примерно 8 тыс. Кол-во платежей для отобранных пользователей примерно 1.5 тыс. В результирующей выборке примерно 370 строк . Есть ли способ ускорить запрос? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 10:31 |
|
||
|
Можно ли ускорить запрос
|
|||
|---|---|---|---|
|
#18+
Алексей Вейник, нужен explain analyze запроса (реального, в приведенном какой-то player непонятный есть) и описания (вывод \d+) участвующих в запросе таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 10:48 |
|
||
|
Можно ли ускорить запрос
|
|||
|---|---|---|---|
|
#18+
Alexius, Maxim Boguk: Решил сделать тестовые таблицы. Опишу все последовательно. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Далее добавил тестовых данных, потом выполнил: Код: sql 1. 2. 3. 4. 5. Результат: "QUERY PLAN" "Nested Loop (cost=5888.34..28780.72 rows=119 width=243) (actual time=120.059..992.727 rows=1363 loops=1)" " -> HashAggregate (cost=5887.91..6126.01 rows=23810 width=17) (actual time=119.028..137.472 rows=50138 loops=1)" " Group Key: (purchase_test.user_id)::text" " -> Seq Scan on purchase_test (cost=0.00..5146.53 rows=296553 width=17) (actual time=0.024..48.758 rows=296553 loops=1)" " -> Index Scan using user_test_pkey on user_test (cost=0.43..0.94 rows=1 width=243) (actual time=0.017..0.017 rows=0 loops=50138)" " Index Cond: ((user_id)::text = (purchase_test.user_id)::text)" " Filter: (((reg_date)::date >= '2016-02-01'::date) AND ((reg_date)::date <= '2016-03-01'::date))" " Rows Removed by Filter: 1" "Planning time: 0.680 ms" "Execution time: 993.499 ms" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 11:30 |
|
||
|
Можно ли ускорить запрос
|
|||
|---|---|---|---|
|
#18+
Алексей Вейник, для данного запроса нужен обычный индекс по reg_date (приведение к date убрать), а не Код: sql 1. 2. либо переписать запрос с использованием аналогичной конструкции с date_trunc в условии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2016, 11:54 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=88&tid=1997081]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 280ms |
| total: | 445ms |

| 0 / 0 |
