Привет!
У меня тут небольшой конфуз возник.
Есть класс, около 250000 объектов.
У класса есть простое строковое недлинное проиндексированное свойство.
Открываю SQL Manager и делаю запросы:
select * from MyTable where Prop = '....'
|
смотрю план запроса (Show Query Plan) и вижу, что каше при поиске будет использовать индексную глобаль, поиск соответсвенно проходит быстро
пишу дальше
select * from MyTable where Upper(Prop) = '....'
|
и вижу, что каше решил исключить из плана использование индекса, запрос соответсвенно выполняется офигенно долго
Почему так происходит? Какая разница каше Upper или не Upper - индексы то хранятся в верхнем регистре
попробывал сделать еще так:
select * from MyTable where %SqlUpper(Prop) = '....'
|
смотрю в план - Каше намеревается смотреть в индексы, НО выполнив запрос получил нулевой результат((. Почитав доку по %SqlUpper решил переделать так:
select * from MyTable where %SqlUpper(Prop, 8) = '....'
|
Но теперь каше передумал с индексами, и решил все сделать по-тупому.
Чем лечить? Или даже не так - это нормальное(задокукментированное) поведение каше или надо в суппорт писать про баг?