powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как заставить FB использовать индекс
15 сообщений из 40, страница 2 из 2
Как заставить FB использовать индекс
    #39441712
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисту уже определись тебе надо при использовании NULL показывать все записи или ни одной.Посмотри повнимательнее на условие в WHERE 20419222 . Если param1 IS NULL, будут выбраны все записи, если NOT NULL - только те, что соответствуют условию field1 = param1.
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39441723
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денися не разработчик но скажу. Нет не будет!Неужели так сложно научить NullIf() пользоваться индексом по полю таблицы, заданному в Expression2 ?
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39441725
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

а почему nullif? А чем другие функции провинились? Прочитай уже статью про методы доступа
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39441727
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениса почему nullif? А чем другие функции провинились? Прочитай уже статью про методы доступаЕсли попутно Iif() научат, то я только за! Другие функции, использующие сравнение значений, как-то не всплыли в памяти. Они есть?
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39441750
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devНеужели так сложно научить NullIf() пользоваться индексом по полю таблицы, заданному в Expression2 ?Ты ставишь телегу впереди лошади.
Сначала нужно прочитать запись, а уже потом к ней можно применить ф-цию.
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39442038
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, телегу бы я ставил впереди лошади, если бы функции NullIf() и Iif() были реализованы отдельно от сервера - в виде UDF, к примеру.
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39442052
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисМимопроходящий, COALESCE забыл
Код: sql
1.
2.
3.
4.
5.
SELECT *
FROM myTable
WHERE 
     field1 BETWEEN COALESCE (:param1, -2147483648) AND COALESCE (:param1, 2147483647)
  AND field2 BETWEEN COALESCE (:param2, -2147483648) AND COALESCE (:param2, 2147483647)


В общем, удалось добиться нужного результата, но для этого понадобилось состряпать план запроса вручную , что-то типа этого:
Код: sql
1.
2.
3.
4.
5.
SELECT *
  FROM myTable
  WHERE field1 BETWEEN COALESCE (:param1, -2147483648) AND COALESCE (:param1, 2147483647)  -- myTable__pk
    AND field2 BETWEEN COALESCE (:param2, -2147483648) AND COALESCE (:param2, 2147483647)
  PLAN JOIN (myTable INDEX (myTable__pk, myTable__fk__field2))

В этом случае получаем оптимальное количество индексных чтений при любой комбинации параметров. Странно, что сервер самостоятельно не способен выбрать такой план.
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39442054
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

план то кривой до безобразия. Он вообще неработоспособный. Что у тебя там за JOIN? С чем он?
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39442064
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, забыл удалить JOIN. В чем, конкретно, кривизна плана, если этот план работает лучше, чем тот, что предлагает сервер?
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39442077
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devhvlad, телегу бы я ставил впереди лошади, если быу тебя была телега. И лошадь.

Включи мозг и перестань болтать ерундой (ц)
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39442080
afgm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВ 3.0 на такие конструкции в плане выдается пара
PLAN ... (table natural, table index (tableindex))
и "нужная часть плана выбирается в рантайме (при выполнении запроса)".
А в RN от тройки явного упоминания именно такого поведения нет.
Это вот оно?
Firebird-3.0.2-ReleaseNotes.pdfOR'ed Parameter in WHERE Clause
Dmitry Yemanov
Performance for (table.field = :param or :param = -1) in the WHERE clause was enhanced
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39442081
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afgm,

это оно и есть
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39442084
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,
Вроде как не рекомендуется использовать свой PLAN. Firebird умнее нас, анализирует данные перед запросом.
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39442087
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI, обсуждаемый explain прост до безобразия. Что мешает тебе проверить своё утверждение?
...
Рейтинг: 0 / 0
Как заставить FB использовать индекс
    #39442196
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIВроде как не рекомендуется использовать свой PLAN.
свой, не свой. Если явно указать план от 3.0 для 2.5, для этого случая, то ФБ 2.5 выматерится. Я же ясно объяснил, как "оптимизируется" данная ситуация. Хочется превратить 2.5 в 3.0? Увы, это можно сделать только установкой 3.0.
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как заставить FB использовать индекс
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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