Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
08.04.2002, 17:06
|
|||
---|---|---|---|
|
|||
Сравнение строк в Oracle |
|||
#18+
Я в Oracle новичек и мне хотелось бы понять, как в Oracle сравниваются строки? Точнее - можно ли выполнять сравнения нечувствительные к регистру строки? Например, чтобы условие Where MyColumn Like 'SM%' находило как SMITH, так и Smith или smith - в SQL Server'е с этим никаких проблем нет. Понятно, что можно испрользовать UPPER - например, Where UPPER(MyColumn) Like 'SM%', но совершенно не понятно как Oracle при этом индексы будет использовать - SQL Server, скорее всего, индекс в такой ситуации использовать не стал бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.04.2002, 06:18
|
|||
---|---|---|---|
|
|||
Сравнение строк в Oracle |
|||
#18+
Если оракл 7.х, то только заводить в таблице дополнительное поле и в нем дублировать значение нужного текстового поля в верхнем регистре (например через триггер) м уже на это поле создават индекс и отбор делать по этому полю. Если 8.1.х, то можно использовать такую примочку: индекс по функции, т.е. при создании индекса указываешбь не столбец, а какое-то функциональное выражение, например upper(column), тогда будет использовать этот индекс. Пробуй. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.04.2002, 07:07
|
|||
---|---|---|---|
Сравнение строк в Oracle |
|||
#18+
2 mmoroz Делал я этот индекс (Function Based Index) на UPPER(столбец) У нас справочники от нескольких записей до 10 тысяч записей, так вот на любом из них оптимизатор не подхватывает этот индекс а делает полный просмотр(8i у нас) - а если насильно хинтами заставить его (индекс) использовать, то по времени медленнее раз в 5 (set timing on так говорит, а не мои ощущения) Причина думаю в том, что Оракл держит в памяти данные после первого прочтения и при несильной загрузке ( у нас параллельно несколько десятков пользователей и несколько из них делают select update 100 мб таблицы, а остальные вообще ерундой занимаються с точки зрения объема ввода/вывода) ему проще полный просмотр делать. 2 Александр можете конечно попробовать эти индексы, но не забудьте поправить 2 параметра инициализации в конфигурационном файле, не помню акие. спросите - поищу, но я бы не советовал, если конечно у Вас другие проблемы (гиговые таблицы или еще чего там чего не знаю) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.04.2002, 08:56
|
|||
---|---|---|---|
|
|||
Сравнение строк в Oracle |
|||
#18+
2 Александр можете конечно попробовать эти индексы, но не забудьте поправить 2 параметра инициализации в конфигурационном файле, не помню акие. спросите - поищу, но я бы не советовал, если конечно у Вас другие проблемы (гиговые таблицы или еще чего там чего не знаю) ------------------------------------- Так проблема-то довольно типичная - люди вводят какие-то данные, как они их вводят часто неизвестно - как же поиск осуществлять? Что-то можно налету в UPPER case преобразовать, но что-то ведь и нельзя? Честно говоря, никак не ожидал такой проблемы... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
09.04.2002, 09:07
|
|||
---|---|---|---|
|
|||
Сравнение строк в Oracle |
|||
#18+
Что бы этот индекс подхватывался надо -прописать параметры инициализации (по моему query_rewrite_enabled=true и еще там что то) -установить стоимостную оптимизацию -правильно написать запрос (where upper(column)= или < или >'qqq' -это подключит индекс, а where upper(column) like('%qqq%'), а это уже без индекса. В последнем случае будет всегда полное сканирование и индекс никакого выигрыша не даст) Что касается индексов на базе функции, то их завели для того, чтобы люди не городили дополнительные колонки с расчитываемыми значениями. А по времени работает столько же сколько и с дополнительными колонками. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=52&mobile=1&tid=1993392]: |
0ms |
get settings: |
12ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
others: | 291ms |
total: | 404ms |
0 / 0 |