|
bind like column
|
|||
---|---|---|---|
#18+
-- Надо оптимизировать такоэ. Какие будут мысли? select * from some_table t where t.txt is not null and :bind_val like '%' || UPPER(t.txt) || '%' -- :bind_val в общем - это Varchar2(2000) -- some_table.txt%type = Varchar2(100) -- таблица растет и TABLE ACCESS FULL уже не радует:) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 19:09 |
|
bind like column
|
|||
---|---|---|---|
#18+
andrey_anonymous Oracle Text Куда в этот запрос Код: plsql 1.
его приткнуть? как оптимизировать tab_column like '%' || :sime_bind || '%' - я знаю. Надо наоборот. Если это можно с помощью Oracle Text сделать, подскажите как... не могу сообразить ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 20:29 |
|
bind like column
|
|||
---|---|---|---|
#18+
andrey_anonymous ОК. делаю индекс типа ctxsys.ctxrule и дальше с помощью matches(t.txt, :bind_val).... А без Oracle Text никак? какой-нибудь хитрый функц. индекс? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 20:57 |
|
bind like column
|
|||
---|---|---|---|
#18+
vvp999 какой-нибудь хитрый функц. индекс? https://docs.oracle.com/en/database/oracle/oracle-database/19/addci/using-extensible-indexing.html#GUID-0E4DE524-0FF5-440A-8B84-A1DB8AF24C2A ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 21:15 |
|
bind like column
|
|||
---|---|---|---|
#18+
vvp999 -- Надо оптимизировать такоэ. Какие будут мысли? select * from some_table t where t.txt is not null and :bind_val like '%' || UPPER(t.txt) || '%' vvp999 как оптимизировать tab_column like '%' || :sime_bind || '%' - я знаю. Надо наоборот Это одинаковые ситуации. И там и там IFS. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 21:34 |
|
bind like column
|
|||
---|---|---|---|
#18+
vvp999 -- Надо оптимизировать такоэ. Какие будут мысли? select * from some_table t where t.txt is not null and :bind_val like '%' || UPPER(t.txt) || '%' -- :bind_val в общем - это Varchar2(2000) -- some_table.txt%type = Varchar2(100) -- таблица растет и TABLE ACCESS FULL уже не радует:) Т.е у вас в таблице словарь, и вам нужно найти все "слова" содержащиеся в длинной переменной? И при этом слова могут налезать друг на друга? Верно? Например, в если :bind = "ФЛОРИДА", а в таблице находятся слова "лор", "флорида" и "да", вы все три строки хотите получить? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2020, 22:43 |
|
bind like column
|
|||
---|---|---|---|
#18+
AlexFF__| vvp999 -- Надо оптимизировать такоэ. Какие будут мысли? select * from some_table t where t.txt is not null and :bind_val like '%' || UPPER(t.txt) || '%' vvp999 как оптимизировать tab_column like '%' || :sime_bind || '%' - я знаю. Надо наоборот Это одинаковые ситуации. И там и там IFS. index full scan? Какой индекс покроет первую ситуацию, можете привести? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 10:50 |
|
bind like column
|
|||
---|---|---|---|
#18+
НеофитSQL Например, в если :bind = "ФЛОРИДА", а в таблице находятся слова "лор", "флорида" и "да", вы все три строки хотите получить? да, но не слова, а выражения (лат.+цифры+пробел_-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 10:54 |
|
bind like column
|
|||
---|---|---|---|
#18+
vvp999, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
будет ли быстрее ifs хз, если таблица широкая то возможно и да ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 12:15 |
|
bind like column
|
|||
---|---|---|---|
#18+
vvp999 НеофитSQL Например, в если :bind = "ФЛОРИДА", а в таблице находятся слова "лор", "флорида" и "да", вы все три строки хотите получить? да, но не слова, а выражения (лат.+цифры+пробел_-) Самое быстрое из известных мне решений включает построение дерева вашего словаря. Тогда все содержащиеся в :bind выражения находятся в один проход строки :bind. Потребуется память, пропорциональная числу строк в базе (примерно 10-20 байт на строку). Также скорость вставки новых строк уменьшится, по причине обновления дерева. Однако это уже будет не SQL запрос, а совсем другой код. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 17:45 |
|
bind like column
|
|||
---|---|---|---|
#18+
НеофитSQL Самое быстрое из известных мне решений включает построение дерева вашего словаря. Опять изобретаем пилисипед? Как ты думаешь, что (и много другого) строит (и самое главное синхронизирует) Oracle Text? SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 18:58 |
|
bind like column
|
|||
---|---|---|---|
#18+
SY НеофитSQL Самое быстрое из известных мне решений включает построение дерева вашего словаря. Опять изобретаем пилисипед? Как ты думаешь, что (и много другого) строит (и самое главное синхронизирует) Oracle Text? SY. К сожалению, я ещё не знаю ответа на ваш вопрос. Я посмотрел несколько примеров использования oracle text, и они все рашают задачу, не похожую на ту, что решает TC. Впрочем, ТС уже так и сказал в одном из ранних сообщений. В таблице всего одна колонка, плюс задана одна длинная переменная. Если кто-то из участников этой темы умел решать такую задачу через "оракл текст", непонятно что им мешает применить знания и написать 3-4 строчки, тем самым помочь ТС? У ТС реальная задача, с виду простая но нестандартная, и похоже не из сферы задач, которую оракл текст предназначен решать. Если бы я знал как помочь, я бы помог. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 22:32 |
|
bind like column
|
|||
---|---|---|---|
#18+
Stax vvp999, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
будет ли быстрее ifs хз, если таблица широкая то возможно и да ..... stax Да, да , вот хотя бы такое получить! Какой индекс Вы создаете, можно DDL, пожалуйста? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 11:54 |
|
bind like column
|
|||
---|---|---|---|
#18+
НеофитSQL У ТС реальная задача, с виду простая но нестандартная, и похоже не из сферы задач, которую оракл текст предназначен решать. Если бы я знал как помочь, я бы помог. Вначале мне все правильно подсказали и решение я быстро нашел авторОК. делаю индекс типа ctxsys.ctxrule и дальше с помощью matches(t.txt, :bind_val).... Решение не подходит потому, что я не могу добавлять ctxapp владельцу схемы, а без этого индекс типа ctxsys.ctxrule не создается. Т.ч. оракл текстом я пользоваться увы не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 11:57 |
|
bind like column
|
|||
---|---|---|---|
#18+
vvp999, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
ps можно принудительно добавить хинт index(t I$T$N) ...... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 12:59 |
|
bind like column
|
|||
---|---|---|---|
#18+
vvp999 ... Да, да , вот хотя бы такое получить! ... ну, на "большой таблице", желать себе index full scan я бы не отважился... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 14:30 |
|
bind like column
|
|||
---|---|---|---|
#18+
vvp999 Решение не подходит потому, что я не могу добавлять ctxapp владельцу схемы А убедить того, кто может - не получится? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 14:35 |
|
bind like column
|
|||
---|---|---|---|
#18+
Я поигрался с MATCHES() немного, но у меня почему-то Оракл Текст мало находит. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
В первом запросе я ожидал "one,two", во втором "two", в третьем (если Оракл текст способен делать поиск с перекрывающимися токенами) ожидал "one,two,won". Как должно быть: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 19:04 |
|
|
start [/forum/topic.php?fid=52&fpage=33&tid=1880742]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 296ms |
total: | 444ms |
0 / 0 |