powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сравнение строк в Oracle
5 сообщений из 5, страница 1 из 1
Сравнение строк в Oracle
    #32027264
Alexander_Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в Oracle новичек и мне хотелось бы понять, как в Oracle сравниваются строки?

Точнее - можно ли выполнять сравнения нечувствительные к регистру строки?
Например, чтобы условие Where MyColumn Like 'SM%' находило как SMITH, так и Smith или smith -
в SQL Server'е с этим никаких проблем нет. Понятно, что можно испрользовать
UPPER - например, Where UPPER(MyColumn) Like 'SM%', но совершенно не понятно как
Oracle при этом индексы будет использовать - SQL Server, скорее всего, индекс в такой
ситуации использовать не стал бы.
...
Рейтинг: 0 / 0
Сравнение строк в Oracle
    #32027283
mmoroz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если оракл 7.х, то только заводить в таблице дополнительное поле и в нем дублировать значение нужного текстового поля в верхнем регистре (например через триггер) м уже на это поле создават индекс и отбор делать по этому полю.
Если 8.1.х, то можно использовать такую примочку: индекс по функции, т.е. при создании индекса указываешбь не столбец, а какое-то функциональное выражение, например upper(column), тогда будет использовать этот индекс.
Пробуй.
...
Рейтинг: 0 / 0
Сравнение строк в Oracle
    #32027286
user1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 mmoroz

Делал я этот индекс (Function Based Index) на UPPER(столбец)

У нас справочники от нескольких записей до 10 тысяч записей, так вот на любом из них оптимизатор не подхватывает этот индекс а делает полный просмотр(8i у нас) - а если насильно хинтами заставить его (индекс) использовать, то по времени медленнее раз в 5 (set timing on так говорит, а не мои ощущения)

Причина думаю в том, что Оракл держит в памяти данные после первого прочтения и при несильной загрузке ( у нас параллельно несколько десятков пользователей и несколько из них делают select update 100 мб таблицы, а остальные вообще ерундой занимаються с точки зрения объема ввода/вывода) ему проще полный просмотр делать.

2 Александр
можете конечно попробовать эти индексы, но не забудьте поправить 2 параметра инициализации в конфигурационном файле, не помню акие. спросите - поищу, но я бы не советовал, если конечно у Вас другие проблемы (гиговые таблицы или еще чего там чего не знаю)
...
Рейтинг: 0 / 0
Сравнение строк в Oracle
    #32027298
Alexander_Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Александр
можете конечно попробовать эти индексы, но не забудьте поправить 2 параметра инициализации в конфигурационном файле, не помню акие. спросите - поищу, но я бы не советовал, если конечно у Вас другие проблемы (гиговые таблицы или еще чего там чего не знаю)
-------------------------------------

Так проблема-то довольно типичная - люди вводят какие-то данные, как они их вводят часто неизвестно - как же поиск осуществлять? Что-то можно налету в UPPER case преобразовать, но что-то ведь и нельзя? Честно говоря, никак не ожидал такой проблемы...
...
Рейтинг: 0 / 0
Сравнение строк в Oracle
    #32027301
mmoroz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что бы этот индекс подхватывался надо
-прописать параметры инициализации (по моему query_rewrite_enabled=true и еще там что то)
-установить стоимостную оптимизацию
-правильно написать запрос (where upper(column)= или < или >'qqq' -это подключит индекс, а where upper(column) like('%qqq%'), а это уже без индекса. В последнем случае будет всегда полное сканирование и индекс никакого выигрыша не даст)
Что касается индексов на базе функции, то их завели для того, чтобы люди не городили дополнительные колонки с расчитываемыми значениями.
А по времени работает столько же сколько и с дополнительными колонками.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сравнение строк в Oracle
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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