Поиск без учета регистра в Sybase

Я устал искать в Google решение для поиска без учета регистра в Sybase ASE (данные Sybase / имена столбцов чувствительны к регистру). В документации Sybase с гордостью говорится, что есть только один способ выполнить такой поиск, который использует функции Upper и Lower, но, как гласит пословица, у него есть проблемы с производительностью. И поверьте мне, они правы, если в вашей таблице огромные данные, производительность настолько неудобна, что вы больше никогда не будете использовать Upper и Lower. Мой вопрос коллегам-разработчикам: как вы, ребята, справитесь с этим?

P.S. Не советуйте менять порядок сортировки или переходить к любой другой базе данных, в реальном мире разработчики не контролируют базы данных.


person Dchucks    schedule 17.09.2008    source источник


Ответы (3)


Попробуйте создать functional index, например

Create Index INDX_MY_SEARCH on TABLE_NAME(LOWER(@MySearch)
person Bipin Daga    schedule 22.06.2010

Добавьте дополнительный столбец в верхнем или нижнем регистре в оператор выбора. Пример:

select col1, upper(col1) upp_col1 from table1 order by upp_col1
person kamsky    schedule 23.11.2011

Если вы не можете изменить порядок сортировки в базе данных (лучший вариант), то индексы в неизвестных полях дела не помогут. Есть способ сделать это и сохранить производительность, если количество полей является управляемым. Делаете лишний столбец MyFieldLower. Вы используете триггер, чтобы поле оставалось заполненным строчными буквами MyField.

Тогда запрос: WHERE MyFieldLower = LOWER (@MySearch)

Это будет использовать индексацию.

person Peter    schedule 17.09.2008