Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
Не могу решить задачу: есть таблица клиентов и их телефонов. Нужно выбрать тех клиентов, у которых телефоны совпадают. Элементарная задачка, если бы не 380000 записей в этой таблице. Для наглядности: Код: sql 1. В поле clean_phone содержатся только цифры, у одного клиента может быть 1 телефон, у другого 3. Поэтому искать нужно по вхождению. Выбрать нужно всех клиентов, у которых телефоны совпадают. Самый логичный вариант запроса не отрабатывает даже за 2 часа: Код: sql 1. 2. 3. 4. 5. 6. 7. Можно избавиться от повторного вызова CHARINDEX, вызывая его только для поиска меньшего телефона в большем. Но это тоже не помогает. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Индексы не помогли ни в одном из вариантов: Код: sql 1. 2. Код: sql 1. 2. Селект тоже не пашет: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Версия сервера 2014. Мои варианты закончились :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 15:01 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V.Нужно выбрать тех клиентов, у которых телефоны совпадают. K.T.V.Самый логичный вариант запроса не отрабатывает даже за 2 часа: Код: sql 1. Ппц логика... надо выбрать? так давайте удалим... K.T.V.у одного клиента может быть 1 телефон, у другого 3. Поэтому искать нужно по вхождению А сначала нормализовать данные - не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 15:13 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V., Сравнивать 1 к 3м телефонам ещё ладно, но 3 к одному просто CHARINDEX явно нельзя. Нормализовать хоть в "право" хоть вниз и потом уже искать, ну и удалять кого из них тоже надо определить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 15:16 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V., Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 15:16 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
Руслан Дамирович, агонь! Только 3 телефона в одном поле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 15:18 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
TaPaKРуслан Дамирович, агонь! Только 3 телефона в одном поле K.T.V.В поле clean_phone содержатся только цифры, у одного клиента может быть 1 телефон, у другого 3 Ну, не очевидно, что ВСЕ ТРИ в одном поле :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 15:25 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V., Код: sql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 15:32 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V., вообще в простом случае достаточно, хотя может и упускаю чего... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 15:37 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
TaPaK, спасибо, но нет. like, тем более с % перед тем что ищем, никак не ускоряет выборку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 16:07 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
К сожалению, данные нормализовать нельзя, только работать над проблемой as is. Нет никакого универсального разделителя телефонов, поэтому нельзя определить, 3 штуки их в поле или 1. Хорошо что договорились, что ищем только вхождение 1го в 3, а не наоборот :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 16:09 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
Руслан Дамирович, я просто убираю из поля телефон все посторонние символы кроме цифр. Поэтому в вашем варианте это будут телефоны ( 1, '12345612345678' ), ( 2, '12345623456789' ) что значительно усложняет задачу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 16:13 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V.TaPaK, спасибо, но нет. like, тем более с % перед тем что ищем, никак не ускоряет выборку а я вот совсем не уверен что CHARINDEX быстрее LIKE +BIN в вашем случае ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 16:15 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
TaPaK, ну даже не вдаваясь в абстрактные рассуждения, практика показала, что like все равно выполняется недопустимо долго (больше часа) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 16:58 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V.TaPaK, ну даже не вдаваясь в абстрактные рассуждения, практика показала, что like все равно выполняется недопустимо долго (больше часа) я так понимаю вы думаете что есть волшебный рашпиль который насравнивает вам значения? А как вы собираетесь жить когда указано 2 телефона? а + b и у другого b + a? Ну и ещё с десяток таких вариантов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 17:01 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V.Руслан Дамирович, я просто убираю из поля телефон все посторонние символы кроме цифр. Поэтому в вашем варианте это будут телефоны ( 1, '12345612345678' ), ( 2, '12345623456789' ) что значительно усложняет задачу Ну так облегчите себе задачу, и сначала разделите данные, а потом зачистите. А то прям комсомолом попахивает - стоя в гамаке... лайкаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 17:31 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V.К сожалению, данные нормализовать нельзя, только работать над проблемой as is. Нет никакого универсального разделителя телефонов, поэтому нельзя определить, 3 штуки их в поле или 1.Имеем три номера телефона - 1111, 22222 и 333333 Телефоны клиента1, согласно вашим условиям - 111122222 клиента2 - 22222333333 Как и чего будете искать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 17:49 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V., ищИте только точные совпадения, остальное - это мусор, а не номера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 17:59 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовK.T.V., ищИте только точные совпадения, остальное - это мусор, а не номера. действительно, просто удалите все записи где длинна больше стандартного нормера и всё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 18:03 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
ну это не я придумываю идиотские условия. Нужно, чтобы работал вариант найти телефон 55555 в телефоне 1111111555552222. Остальными пренебрегаем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 18:04 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V.ну это не я придумываю идиотские условия. Нужно, чтобы работал вариант найти телефон 55555 в телефоне 1111111555552222. Остальными пренебрегаем.Заодно 55555 будет искаться в паре 44555 и 55666 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 18:09 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V.ну это не я придумываю идиотские условия. Нужно, чтобы работал вариант найти телефон 55555 в телефоне 1111111555552222. Остальными пренебрегаем. Зато в ваших силах обосновать, что условия идиотские, и потому невыполнимые. Это может повлечь за собой увольнение: 1. а оно вам нужно - дальше хуже; 2. развивайте навыки дипломатии; 3. вы лукавите, и условия совсем не такие, как вы их "не придумали". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 18:17 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V., Вот. к примеру, в этих двух склееных строказх (в каждой по 3 телефонных номера) есть совпадения по-вашему: 123456712345681234569 и 12345234561234560 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 18:20 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич, нет, потому что один телефон клиента полностью должен входить в телефон другого клиента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 18:35 |
|
||
|
Оптимизация join'а большой таблицы с собой же
|
|||
|---|---|---|---|
|
#18+
K.T.V.Гавриленко Сергей Алексеевич, нет, потому что один телефон клиента полностью должен входить в телефон другого клиентаА где здесь телефоны клиентов? Здесь две строки, к которым не прилагается алгоритм разбития из на подстроки (телефоны), чтобы потом сравнить хотя бы с неразбитой второй строкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2018, 18:38 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39625573&tid=1689984]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 266ms |
| total: | 440ms |

| 0 / 0 |
