Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / NULL в поле ломает выборку по индексу? / 14 сообщений из 14, страница 1 из 1
31.10.2014, 13:34
    #38792900
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL в поле ломает выборку по индексу?
Привет.

Есть таблица с 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
31.10.2014, 13:37
    #38792905
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL в поле ломает выборку по индексу?
Раз мешает, то паркуа-бы и не па 16767450 ?
...
Рейтинг: 0 / 0
31.10.2014, 13:47
    #38792916
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL в поле ломает выборку по индексу?
wadman,

Не катит. IS NULL приводит к натуралу. Получаем первый проход по индексу, второй - натуралом.
...
Рейтинг: 0 / 0
31.10.2014, 13:51
    #38792920
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL в поле ломает выборку по индексу?
DarkMasterIS NULL приводит к натуралу.
Нефиг пользоваться окаменевшим дерьмом мамонта. В современных версиях - не приводит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
31.10.2014, 13:52
    #38792923
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL в поле ломает выборку по индексу?
DarkMasterСоздан индекс на поля (D1,D2).
Этот индекс действительно составной?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
31.10.2014, 13:55
    #38792935
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL в поле ломает выборку по индексу?
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
31.10.2014, 13:55
    #38792936
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL в поле ломает выборку по индексу?
DarkMasterЭто так и задумано или я чего-то пропустил?
похоже, что ты не понимаешь: (1) когда используется индекс для поиска по OR и (2) когда может быть использован композитный индекс.
...
Рейтинг: 0 / 0
31.10.2014, 14:04
    #38792952
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NULL в поле ломает выборку по индексу?
dimitr,

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

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

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

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

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

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

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


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