использование UPPER

Лиман Артём
Дата: 18.01.2005 13:01:01
Привет!
У меня тут небольшой конфуз возник.
Есть класс, около 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) = '....'
Но теперь каше передумал с индексами, и решил все сделать по-тупому.

Чем лечить? Или даже не так - это нормальное(задокукментированное) поведение каше или надо в суппорт писать про баг?
Лиман Артём
Дата: 18.01.2005 14:01:37
разобрался, для того что б каше нормально читал индексы нужно делать так:
select * from MyTable where %SqlUpper(Prop) =%SqlUpper('....')