|
Оптимизация производительности запроса, с использованием индексов.
|
|||
---|---|---|---|
#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:11 |
|
Оптимизация производительности запроса, с использованием индексов.
|
|||
---|---|---|---|
#18+
RonaldLRivest, а какие типы у полей vc.DateBegin и vc.DateEnd ??? -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:21 |
|
Оптимизация производительности запроса, с использованием индексов.
|
|||
---|---|---|---|
#18+
Maxim Boguk, varchar. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 10:04 |
|
Оптимизация производительности запроса, с использованием индексов.
|
|||
---|---|---|---|
#18+
Если varchar и менять это нельзя рекомендую использовать pg_trgm ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 10:18 |
|
Оптимизация производительности запроса, с использованием индексов.
|
|||
---|---|---|---|
#18+
mozheyko_d Если varchar и менять это нельзя рекомендую использовать pg_trgm А если можно менять, то можно как то сделать без применения сторонний модулей? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 14:36 |
|
Оптимизация производительности запроса, с использованием индексов.
|
|||
---|---|---|---|
#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 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2021, 18:23 |
|
Оптимизация производительности запроса, с использованием индексов.
|
|||
---|---|---|---|
#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, 12:09 |
|
Оптимизация производительности запроса, с использованием индексов.
|
|||
---|---|---|---|
#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 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2021, 13:51 |
|
|
start [/forum/topic.php?fid=53&msg=40091718&tid=1993888]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
others: | 305ms |
total: | 417ms |
0 / 0 |