Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Помогите с индексами по датам.  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 820
FB3.
Вот запрос:
select *
from modul a
where a.tip_mdl=1 and current_date between a.ddatn and a.ddatend

Есть работы, у них есть дата начала и дата окончания. Нужно узнать какие работы выполняются сегодня. tip_mdl - тип работ. Манипуляция индексами с полями ddatn и ddatend не приводит к существенному уменьшению количества перебираемых записей. Что можно попробовать? tip_mdl для проформы, можно без него.
18 сен 19, 10:50    [21973052]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с индексами по датам.  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
KreatorXXI, план запроса в студию!
18 сен 19, 10:59    [21973062]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с индексами по датам.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10095
KreatorXXI,

у меня работает

select *
from service
where localtimestamp between datebegin and dateend


Select Expression
-> Filter
-> Table "SERVICE" Access By ID
-> Bitmap And
-> Bitmap
-> Index "SERVICE_IDX_DATEEND" Range Scan (lower bound: 1/1)
-> Bitmap
-> Index "SERVICE_IDX_DATEBEGIN" Range Scan (upper bound: 1/1)

План
PLAN (SERVICE INDEX (SERVICE_IDX_DATEEND, SERVICE_IDX_DATEBEGIN))

------ Информация о производительности ------
Время подготовки запроса = 15ms
Время выполнения запроса = 0ms
Среднее время на получение одной записи = 0,00 ms
Current memory = 558 252 784
Max memory = 558 477 296
Memory buffers = 32 768
Reads from disk to cache = 0
Writes from cache to disk = 0
Чтений из кэша = 51
18 сен 19, 11:24    [21973087]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с индексами по датам.  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 820
Симонов Денис,

а индексы SERVICE_IDX_DATEEND и SERVICE_IDX_DATEBEGIN можно узнать какие?
18 сен 19, 11:43    [21973101]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с индексами по датам.  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 10095
KreatorXXI,

обычные (не составные) на каждое из полей
18 сен 19, 11:49    [21973115]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с индексами по датам.  [new]
KreatorXXI
Member

Откуда: Москва
Сообщений: 820
Симонов Денис,

Спасибо! Заработало как надо. А то я перебрал кучу составных вариантов. А всё просто.
18 сен 19, 12:14    [21973148]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с индексами по датам.  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 3059
KreatorXXI
А то я перебрал кучу составных вариантов
Зачем?
18 сен 19, 12:17    [21973153]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с индексами по датам.  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28296
KreatorXXI,

ты в план Дениса посмотри. Там же написано, 1/1. Это сколько сегментов индекса из скольких используется.
1/1 значит индекс по 1 столбцу.
Композитные индексы имеет смысл строить только если у тебя ВСЕГДА идет поиск по этим столбцам, причем у первых столбцов - на равенство.

p.s. пора бы посмотреть видео про оптимизатор.
https://www.youtube.com/user/ibdeveloper/videos
18 сен 19, 21:35    [21973655]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с индексами по датам.  [new]
Старый плюшевый мишка
Member

Откуда:
Сообщений: 647
kdv
Композитные индексы имеет смысл строить только если у тебя ВСЕГДА идет поиск по этим столбцам, причем у первых столбцов - на равенство.


Я бы даже уточнил - у всех, кроме последнего.
18 сен 19, 21:56    [21973668]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить