|
|
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
Привет! У меня есть 2 таблицы, одна на 300млн. строк (ТАБ1) и вторая на 20млн. строк (ТАБ2) Я написал команду по нахождению совпадений: select * from tab1, tab2 where tab1 = tab2 В обеих таблицах по одной колонке с данными типа "hC98hvW374hoEd7V8d", при создании таблиц в настройках ставил маркеры NN и Binar, формат VARCHAR (100). Сравнение запустилось, но вот уже прошло больше 1 часа, но процесс не заканчивается, и хз когда закончится. И при чем ресурсы не затрачиваются, ОЗУ свободно ещё 30гб, проц холодный, нагрузка 10-17%, 2 gtx1080ti вообще прохлаждаются на 0% загрузки. В общем как ускорить процесс, может можно как-то настроить чтобы ресурсов больше затрачивалось? Может есть у кого какие идеи? Потому что скорость слишком мала, файл на 20млн. строк тестовый, закинул посмотреть найдет ли три заранее спрятанных совпадения. А так на очереди файл под 1 МЛРД. строк, но с такой скоростью пока что это не имеет смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 10:19 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
mordegar2 gtx1080ti вообще прохлаждаются на 0% загрузки GPU-то тут при чём? mordegarпроц холодный, нагрузка 10-17% Суммарно по ядрам? Запрос-то однопоточный. mordegarОЗУ свободно ещё 30гб А базе в конфиге объяснили, что ей можно этим пользоваться? Ну и что важнее - индексы-то есть? mysql умеет только nested loops для join, что без индекса вечности подобно, на каждую строку левой таблицы перебирать всю правую таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 10:27 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
Melkij на каждую строку левой таблицы перебирать всю правую таблицу. Мне нужно чтобы каждую строку из файла 20млн. строк проверил на совпадения в файле с 300 млн. строк. Как меня уверяли, что база sql легко с этим справится за пару минут, и ничего там настраивать не надо особо, что такое ключи и прочее я хз, мне сказали поставить флажки и выбрать варчар (100), дальше типа по команде пойдет сравнение с богоподобной скоростью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 10:36 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
не ключи а индексы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 10:37 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
как и куда эти индексы ставить в workbenchе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 10:47 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
mordegarкак и куда эти индексы ставить в workbenchе? создали таблицы, залили данные, прописали индексы именно в таком порядке заливать в таблицу с индексами в разы дольше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 10:55 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
Для обеих таблиц нужно делать индексы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 11:00 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
mordegarЯ написал команду по нахождению совпадений: Код: sql 1. 2. Должно быть Код: sql 1. 2. mordegarДля обеих таблиц нужно делать индексы?Конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 11:01 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
Akina, а индексы уникальные ставить? У меня все значения в строках уникальные, в рамках одной таблицы совпадений нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 11:09 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
mordegarиндексы уникальные ставить?Если модель требует уникальности - да, иначе лучше не надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 12:12 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
mordegarДля обеих таблиц нужно делать индексы?я бы сделал только у большей таблицы. И в запросе меньшую таблицу сделал ведущей, а большую ведомой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 12:50 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
miksoftя бы сделал только у большей таблицы. И в запросе меньшую таблицу сделал ведущей, а большую ведомой. А это как сделать, я имею ввиду ведущую или ведомую. Большую таблицу поставил на процесс индексирования, вот уже час идет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 12:59 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
mordegar , а каково ожидаемое количество записей из этого запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 13:31 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
Akina, ровно 3, специально их туда внедрил для теста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 13:58 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
Пока ещё идет индексация большой таблицы. В принципе мне без разницы каким способом все это делать. Мною на другом ресурсе был поставлен вопрос о том, с помощью каких ресурсов можно сделать перебор на совпадения в текстовых файлах от 30 до 100 Гб веса, мне посоветовали SQL, поэтому данный способ и проверяю. Мне в целом и Excel подошел бы по задаче, но у него лимит 1 млн. строк, это где то 40Мб. Если с sql не получится, даже хз какие ещё варианты использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 14:05 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
Т.е. для ясности, у меня есть файл с 300 млн. значений - базовые, т.е. они в стоке будут всегда. А есть постоянно пополняющийся файл, он может в конечном виде и 1 и 2 млрд. значений иметь, но это не суть, главное своевременно, можно даже по частям, эти значения проверять на совпадения в стоковом файле. И вроде задача то не самая сложная по структуре, но как на практике оказалось, не то что мощностей не хватает, а именно искусственные везде какие-то лимиты, ограничения, и вот так просто не получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 14:11 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
mordegarmiksoftя бы сделал только у большей таблицы. И в запросе меньшую таблицу сделал ведущей, а большую ведомой. А это как сделать, я имею ввиду ведущую или ведомую. Большую таблицу поставил на процесс индексирования, вот уже час идет.Если индекс будет только один, то оптимизатор сам определит таблицу с индексом в ведомые. Проверить можно в плане запроса. Если план оптимизатора не устраивает, то порядок соединения таблиц можно указать в запросе явно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 14:15 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
mordegarВ обеих таблицах по одной колонке с данными типа "hC98hvW374hoEd7V8d"Это действительные данные, или некая хитрожопая контрольная сумма? В теории для такого типа запроса на таких объёмах данных можно создать дополнительное хранимое вычисляемое поле хэша, имеющего целочисленный тип, его проиндексировать, и по нему связывать (вернее, связывать по hash(t1f1)=hash(t2.f2) and t1.f1=t2.f2 ). Но вот незадача - в MySQL есть либо CRC32, чего маловато на таких объёмах, либо MD5, который, наоборот, великоват. А CRC64, который тут был бы в самый раз - увы... хотя никто не запрещает взять, к примеру, первую (или вторую) половину MD5 и преобразовать его в BIGINT. Вероятность коллизии будет достаточно низкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 14:23 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
Akina, Это действительные данные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 14:30 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
Приветствую. Если исходная информация - текстовые файлы, и проверку надо сделать один раз, возможно, окажется проще: cat file1 file2 | sort | uniq -d ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 22:10 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
NIK.2017Приветствую. Если исходная информация - текстовые файлы, и проверку надо сделать один раз, возможно, окажется проще: cat file1 file2 | sort | uniq -dСоединять нужно по одному полю, а не по всей строке, насколько я понял задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 22:25 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
miksoftСоединять нужно по одному полю, а не по всей строке, насколько я понял задачу. Да, но пока жду что получится с индексом, уже 12 часов пыхтит, вроде недолго осталось но места конечно он мне ппц как занял в ходе данной процедуры. Завтра отпишусь, что получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 23:46 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
Если правильно понял, каждое поле имеет уникальный индекс (ключевое?), а значит, в принципе, вполне может сработать сравнение файлов, состоящих из одного этого поля. Другой вопрос - алгоритм. Каждое с каждым сравнивать - реально долго. Если же строки файлов заранее отсортированы, тогда можно составить довольно простой алгоритм в один проход, который прочитает по первой строке из каждого файла, сравнит значения, а далее будет читать и сравнивать строки из того файла, где значение оказалось меньше. При равенстве - вывод значения. Далее прочитать по строчке и пошли по кругу, пока какой-то файл не закончится. Тут, скорее, вопрос реализации. Возможно СУБД не самое подходящее средство для такой задачи, хотя, отсортированную выгрузку по каждому полю вполне можно сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2018, 23:54 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
mordegar, Покажите DDL таблиц и индекса, который пытаетесь создать. Если поле для соединения уникально, то лучше было бы сначала его сделать первичным ключом, а потом данные в таблицу заливать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2018, 00:32 |
|
||
|
Как ускорить сравнение огромных таблиц
|
|||
|---|---|---|---|
|
#18+
mordegarВ обеих таблицах по одной колонке с данными типа "hC98hvW374hoEd7V8d", при создании таблиц в настройках ставил маркеры NN и Binar, формат VARCHAR (100). а они что, разных размеров идут? и вы конечно же делаете индекс по всей длине? там 10 чаров хватит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2018, 02:18 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=47&tid=1829614]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 154ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...