|
|
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
есть две таблицы: 1) счета, 200+ млн строк, содержит номера счетов вида 1234657897946546, 12346578979465846, 479687465411647, ... 2) маски, 2 тыс строк, содержит маски вида 12345%, 66_45%, 7__78% задача: получить счета, подходящие под маски, т.е. результат соединения "счета.номер_счета LIKE маски.маска" это более 2/3 таблицы счетов (130+ млн строк) проблема: план запроса = 2 FTS + nested loops = очень долго вопрос: как ускорить? спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 12:11 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
Alexus12, распараллелить, не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 12:41 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
Alexus12, Если маски ограничены по длине и всегда отвечают логике const% (т.е. нет масок %const%), то можно сгенерировать по ним все возможные варианты начала строки и соединять по substr. Если номера счетов числовые, то substr особого выигрыша не даст. Тогда можно попробовать сгенерировать по маскам диапазоны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 12:46 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
Alexus12, Покажи результат по количеству масок в зависимости от фиксированных первых N цифр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 12:50 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
envсоединять по substrВ чем вариант соединения по substr даст выигрыш по сравнению с вариантом соединения по like? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 12:51 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
Alexus12, Проверяли?: create index ix_substring on TABLE (substr(COLUMN, 4, 9)) -- значения согласно условиям или с использованием virtual columns или просто substr. LIKE Вы сознательно используете? Он НЕ использует индексы, как и написано в доке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 12:55 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
ХунтаПиночетаОн НЕ использует индексы, как и написано в доке.Процитируй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:00 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
Alexus12получить счетаПолучить счета (один столбец) или получить все столбцы из таблицы счетов? Alexus12план запроса = 2 FTS + nested loops = очень долгоЕсли количество запрашиваемых столбцов мало, то можно попробовать 1xIFFS (счета) + 1хFTS(маски) + Hash Join + Parallel(?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:03 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
ORA__SQL Hash Join Что хешировать для LIKE? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:05 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
ХунтаПиночетаLIKE Вы сознательно используете? Он НЕ использует индексы, как и написано в доке. Исключительно для опровержения хуеты Пиночета Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:08 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
-2-ORA__SQL Hash Join Что хешировать для LIKE?Добавить equi join из substr, если нет масок, начинающихся на % ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:08 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
AmKadenvсоединять по substrВ чем вариант соединения по substr даст выигрыш по сравнению с вариантом соединения по like? По substr можно построить отдельный индекс на таблице счетов. Если маска фиксированной длины. Если номера счетов числовые, тоже можно сделать индекс по substr. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:11 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
ORA__SQLможно попробовать 1xIFFS (счета) + 1хFTS(маски) + Hash Join + Parallel(?)До кучи, напрашивается Partition ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:15 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
-2-Процитируй. When we use LIKE with preceding % it always goes for full scan. Index and LIKE Operator asktom.oracle.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 13:46 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
-1--2-Процитируй. When we use LIKE with preceding % it always goes for full scan. Index and LIKE Operator asktom.oracle.com Читаем по диагонали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 14:08 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
-1--2-Процитируй. When we use LIKE with preceding % it always goes for full scan. Index and LIKE Operator asktom.oracle.comасктом не документация и в начальном утверждении безусловное "НЕ использует". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 14:09 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
-2--1-пропущено... When we use LIKE with preceding % it always goes for full scan. Index and LIKE Operator asktom.oracle.comасктом не документация . откуда такая категоричность? Юношеский максимализм ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 14:14 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
ХунтаПиночетаОн НЕ использует индексы, как и написано в доке. категоричное утверждение с отсылкой к документации -1-When we use LIKE with preceding % упс, оказывается использует, кроме определённых условий -1-asktom.oracle.com дока? Блоги Льюиса, Усольцева, Ахмадеева и т.д. тоже считать документацией? Ответы на sql.ru - тоже дока? Книга фотошопа - тоже считается докой? Или "всем должно быть очевидно", что мнение (пусть и очень профессиональное) одного сотрудника компании - это и есть документация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 14:47 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
теперь обратимся к доке автор Pattern Matching on Indexed Columns When you use LIKE to search an indexed column for a pattern, Oracle can use the index to improve performance of a query if the leading character in the pattern is not % or _. In this case, Oracle can scan the index by this leading character. If the first character in the pattern is % or _, then the index cannot improve performance because Oracle cannot scan the index. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 14:50 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
envтеперь обратимся к доке автор Pattern Matching on Indexed Columns When you use LIKE to search an indexed column for a pattern, Oracle can use the index to improve performance of a query if the leading character in the pattern is not % or _. In this case, Oracle can scan the index by this leading character. If the first character in the pattern is % or _, then the index cannot improve performance because Oracle cannot scan the index.IFS и IFFS за scan the index не считается? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 14:56 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
envУсольцева, Ахмадеева что за женщины такие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 15:02 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
Кривошипно-шатунный механизмenvУсольцева, Ахмадеева что за женщины такие? Родительный падеж ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 15:04 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
номера счетов числовые? - нет, varchar но индекса по номерам счетов нет и поставить нельзя основной вопрос такой: если join по like, то hash / merge в принципе невозможен? т.е. план всегда будет nested loops? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 16:33 |
|
||
|
Inner join on LIKE
|
|||
|---|---|---|---|
|
#18+
ORA__SQL, Это была цитата на фразу Он НЕ использует индексы, как и написано в доке. Считается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2017, 16:41 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39462215&tid=1885779]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
174ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 478ms |

| 0 / 0 |
