powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Можно ли как-то получить профит от индекса при использовании выражений?
4 сообщений из 4, страница 1 из 1
Можно ли как-то получить профит от индекса при использовании выражений?
    #40045792
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть EAV-таблица с функциональным индексом:
Код: plsql
1.
CREATE INDEX "CUSTOMER_CONTACT_VAL_IDX" ON "BM_CUSTOMER_CONTACT" ("CONTACT_DICT_ID", UPPER("VALUE"))


В таблице хранятся короткие значения (до 20 символов). Эти данные использовались только для просмотра (не для связей), поэтому для удобства пользователей к ним можно было добавить короткое пояснение (через пробел). То есть значение могло быть задано как "192.168.1.1", так и "192.168.1.1 Шлюз".
Но теперь нужно сопоставлять эти данные с другой таблицей:
Код: plsql
1.
2.
3.
select ...
from tbl1
join bm_customer_contact cc on (cc.contact_dict_id = 220 and upper(cc.value) = tbl1.ip)


Тут все хорошо, индекс используется, но в таком варианте значения с пояснениями пролетают.
Если же делать более сложное соединение (с помощью instr или regexp_substr), то соединение работает, а вот индекс уже нет.
Не подскажите, можно ли тут что-то придумать, чтобы и индекс задействовать, и опциональное пояснение сохранить?
Что-то типа upper(cc.value) like tbl1.ip||'%', только перевернуть.
...
Рейтинг: 0 / 0
Можно ли как-то получить профит от индекса при использовании выражений?
    #40045849
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.

Что-то типа upper(cc.value) like tbl1.ip||'%', только перевернуть.


почему перевернуть?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> ed
Wrote file afiedt.buf

  1  with cc as (select  '192.168.1.1 Шлюз' value from dual)
  2  ,t as (select  '192.168.1.1' ip from dual)
  3* select * from t,cc where upper(cc.value) like t.ip||'%'
SQL> /

IP          VALUE
----------- ----------------
192.168.1.1 192.168.1.1 Шлюз



.....
stax
...
Рейтинг: 0 / 0
Можно ли как-то получить профит от индекса при использовании выражений?
    #40045868
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, это я сам уже запутался.
Да, так работает.
Единственное, проверку тогда лучше записать иначе: (upper(cc.value) = tbl1.ip or upper(cc.value) like tbl1.ip||' %')
(чтобы не было ложных срабатываний для 192.168.1.123 например)
...
Рейтинг: 0 / 0
Можно ли как-то получить профит от индекса при использовании выражений?
    #40046085
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
(чтобы не было ложных срабатываний для 192.168.1.123 например)

тогда надо тупо вырезать ир (upper(cc.value) like tbl1.ip||' %') AND ...)

ps
"поэтому для удобства пользователей" вылезает боком
убрать удобства в отдельное поле

.....
stax
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Можно ли как-то получить профит от индекса при использовании выражений?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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