powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / NULL в поле ломает выборку по индексу?
14 сообщений из 14, страница 1 из 1
NULL в поле ломает выборку по индексу?
    #38792900
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Есть таблица с 2 полями типа DATE (пусть будет D1 и D2). Создан индекс на поля (D1,D2).
К таблице идет запрос вида:

Код: plsql
1.
  SELECT ...  WHERE (T.D1 between :PARAM_DATE1 and  :PARAM_DATE2) or (T.D2 between :PARAM_DATE1 and :PARAM_DATE2)



- все ок, select хватает индекс, все счастивы.

Понадобилось добавить проверку на NULL одного из полей:

Код: plsql
1.
  SELECT ...  WHERE (T.D1 between :PARAM_DATE1 and  :PARAM_DATE2) or (T.D2 between :PARAM_DATE1 and :PARAM_DATE2) or (T.D2 is NULL)



- select пошел натуралом.

Это так и задумано или я чего-то пропустил?
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38792905
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз мешает, то паркуа-бы и не па 16767450 ?
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38792916
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Не катит. IS NULL приводит к натуралу. Получаем первый проход по индексу, второй - натуралом.
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38792920
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterIS NULL приводит к натуралу.
Нефиг пользоваться окаменевшим дерьмом мамонта. В современных версиях - не приводит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38792923
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterСоздан индекс на поля (D1,D2).
Этот индекс действительно составной?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38792935
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

База не моя. У них - 2.5.0 (пичалька, да), бить по выступающим частям тела - мне за это не платят. В принципе обошел -

Код: plsql
1.
2.
3.
select .... where (d1 between :p1 and :p2) or (d2 between :p1 and :p2) 
union all
select .... where (d2 is null)



+ отдельный индекс на d2...
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38792936
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterЭто так и задумано или я чего-то пропустил?
похоже, что ты не понимаешь: (1) когда используется индекс для поиска по OR и (2) когда может быть использован композитный индекс.
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38792952
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

Возможно. Пните в нужном направлении плиз.
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38792960
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Индекс по (D1, D2) может использоваться при поиске только по D1 или при поиске сразу и по D1 и по D2

Поиски типа (T.D2 between :PARAM_DATE1 and :PARAM_DATE2) и типа (T.D2 is NULL) вообще не должны были пользоваться этими индексами даже в принципе...
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38792964
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterПните в нужном направлении плиз.
Пинаю: http://ibase.ru/devinfo/dataaccesspaths.htm
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38792972
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Пошел читать ;) Всем спасибо вопрос закрыт.
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38793166
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochПоиски типа (T.D2 between :PARAM_DATE1 and :PARAM_DATE2) и типа (T.D2 is NULL) вообще не должны были пользоваться этими индексами даже в принципе...
Так в запросе обе составляющие ключа проверяются на один диапазон, тч оптимизатор тут весьма умен

В принципе обошел
Так если индекс по D2 добавил - может, и в старом варианте, без union, работает?
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38793179
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

и что это меняет ?
Если по композиту можно отлавливать ситуации "столбец1 не попал, а столбец 2 попал", и уж 100% можно отлавливать записи "столбец1 попал и столбец2 попал", то по нему же можно и отрабатывать запросы "столбец 2 попал, столбец 1 пофигу", потому что это эквивалентно "столбец 1 попал или не попал, стобец 2 попал".

То есть мы имеем поиск по композиту второго ключа без первого. В принципе это возможно (full scan индекса, вместо full scan'a данных), но я сомневаюсь, что FB это делает
...
Рейтинг: 0 / 0
NULL в поле ломает выборку по индексу?
    #38793314
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, там or... проглядел, думал, что and
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / NULL в поле ломает выборку по индексу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]