У меня есть запрос, который довольно хорошо работает, когда выполняется так:
SELECT YADAYADA FROM MYTABLE WHERE FVAL <= 100 AND TVAL >= 100
Поскольку существует индекс для (FVAL, TVAL), запрос является полностью оптимальным, поскольку поиск по некластерному индексу для всего запроса.
Теперь было бы неплохо использовать константу, возвращаемую пользовательской функцией здесь.Функция будет возвращать постоянное значение для всей транзакции , а не только для этого запроса.Но при этом:
SELECT YADAYADA FROM MYTABLE WHERE FVAL <= dbo.myVal() AND TVAL >= dbo.myVal()
дает неоптимальные результаты - план запроса больше не работает как поиск по индексу, а вместо этого настаивает на поиске, а затем фильтрации , что, очевидно, НАМНОГО медленнее - даже если в этом случае моя функция определяется как возвращающая постоянное значение в этом действительно простом случае.
Я пытался использовать предложение BETWEEN - не лучше.Я пробовал табличные функции, не лучше (на самом деле, план запросов становится все более сложным).
Есть ли любой способ убедить SQL * Server в том, что вы, приятель,это значение константа , которое мы получаем, и соответственно оптимизировать план ??