Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
19.08.2021, 11:11
|
|||
---|---|---|---|
|
|||
Оптимизация производительности запроса, с использованием индексов. |
|||
#18+
Здравуствуйте. Помогите пожалуйсте решить задачку. Нужно вывести имена сотрудников, которые не были в отпуске в 2020 году. В базе есть сотриднки которые вообще не ходили в отпуск и которые ходили несколько раз. По итогу получается вот такой запрос: select name from Employee ep left join Vacation vc on vc.ID_Employee = ep.ID and (vc.DateBegin like '%2020%' or vc.DateEnd like '%2020%') where vc.ID_Employee is null Но это полное сканирование таблицы, при больших объемах запрос будет работать очень медленно, индексы использоваться не будут. Как можно оптимизировать запрос? Сделать его производительнее и так, чтобы можно было работать с индексами? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.08.2021, 11:21
|
|||
---|---|---|---|
|
|||
Оптимизация производительности запроса, с использованием индексов. |
|||
#18+
RonaldLRivest, а какие типы у полей vc.DateBegin и vc.DateEnd ??? -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2021, 10:04
|
|||
---|---|---|---|
|
|||
Оптимизация производительности запроса, с использованием индексов. |
|||
#18+
Maxim Boguk, varchar. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2021, 10:18
|
|||
---|---|---|---|
|
|||
Оптимизация производительности запроса, с использованием индексов. |
|||
#18+
Если varchar и менять это нельзя рекомендую использовать pg_trgm ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2021, 14:36
|
|||
---|---|---|---|
|
|||
Оптимизация производительности запроса, с использованием индексов. |
|||
#18+
mozheyko_d Если varchar и менять это нельзя рекомендую использовать pg_trgm А если можно менять, то можно как то сделать без применения сторонний модулей? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
20.08.2021, 18:23
|
|||
---|---|---|---|
|
|||
Оптимизация производительности запроса, с использованием индексов. |
|||
#18+
RonaldLRivest mozheyko_d Если varchar и менять это нельзя рекомендую использовать pg_trgm А если можно менять, то можно как то сделать без применения сторонний модулей? Если тип date который и должен быть для даты то Код: sql 1. 2. 3.
И (возможно) переписать запрос на что то более удобное для базы но тут уже надо сначала добавить нужные индексы и посмотреть какой план получится. Или как другой вариант вместо типа date использовать тип daterange https://www.postgresql.org/docs/13/rangetypes.html#RANGETYPES-BUILTIN что правильнее будет и удобнее как мне кажется. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.08.2021, 12:09
|
|||
---|---|---|---|
|
|||
Оптимизация производительности запроса, с использованием индексов. |
|||
#18+
Maxim Boguk, т.е. так? select name from Employee ep left join Vacation vc on vc.ID_Employee = ep.ID and (vc.DateBegin>='2020-01-01' and vc.DateBegin<='2020-12-31') OR (vc.DateEnd>='2020-01-01' and vc.DateEnd<='2020-12-31') where vc.ID_Employee is null Этот запрос будет работать быстрее т.к. к нему могут применяться индексы? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.08.2021, 13:51
|
|||
---|---|---|---|
|
|||
Оптимизация производительности запроса, с использованием индексов. |
|||
#18+
RonaldLRivest Maxim Boguk, т.е. так? select name from Employee ep left join Vacation vc on vc.ID_Employee = ep.ID and (vc.DateBegin>='2020-01-01' and vc.DateBegin<='2020-12-31') OR (vc.DateEnd>='2020-01-01' and vc.DateEnd<='2020-12-31') where vc.ID_Employee is null Этот запрос будет работать быстрее т.к. к нему могут применяться индексы? Может работать быстрее да... именно изза индексов. Но возможно и такой вариант придётся переписать но там уже всё проще будет. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1993888]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 256ms |
total: | 366ms |
0 / 0 |