Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как ускорить сравнение огромных таблиц / 25 сообщений из 48, страница 1 из 2
14.09.2018, 10:19
    #39702455
mordegar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
Привет! У меня есть 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 МЛРД. строк, но с такой скоростью пока что это не имеет смысла.
...
Рейтинг: 0 / 0
14.09.2018, 10:27
    #39702460
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
mordegar2 gtx1080ti вообще прохлаждаются на 0% загрузки
GPU-то тут при чём?

mordegarпроц холодный, нагрузка 10-17%
Суммарно по ядрам? Запрос-то однопоточный.

mordegarОЗУ свободно ещё 30гб
А базе в конфиге объяснили, что ей можно этим пользоваться?

Ну и что важнее - индексы-то есть? mysql умеет только nested loops для join, что без индекса вечности подобно, на каждую строку левой таблицы перебирать всю правую таблицу.
...
Рейтинг: 0 / 0
14.09.2018, 10:36
    #39702468
mordegar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
Melkij на каждую строку левой таблицы перебирать всю правую таблицу.

Мне нужно чтобы каждую строку из файла 20млн. строк проверил на совпадения в файле с 300 млн. строк.
Как меня уверяли, что база sql легко с этим справится за пару минут, и ничего там настраивать не надо особо, что такое ключи и прочее я хз, мне сказали поставить флажки и выбрать варчар (100), дальше типа по команде пойдет сравнение с богоподобной скоростью.
...
Рейтинг: 0 / 0
14.09.2018, 10:37
    #39702469
mordegar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
не ключи а индексы
...
Рейтинг: 0 / 0
14.09.2018, 10:47
    #39702482
mordegar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
как и куда эти индексы ставить в workbenchе?
...
Рейтинг: 0 / 0
14.09.2018, 10:55
    #39702486
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
mordegarкак и куда эти индексы ставить в workbenchе?
создали таблицы, залили данные, прописали индексы
именно в таком порядке
заливать в таблицу с индексами в разы дольше
...
Рейтинг: 0 / 0
14.09.2018, 11:00
    #39702491
mordegar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
Для обеих таблиц нужно делать индексы?
...
Рейтинг: 0 / 0
14.09.2018, 11:01
    #39702494
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
mordegarЯ написал команду по нахождению совпадений:
Код: sql
1.
2.
select * from tab1, tab2
  where tab1 = tab2


Должно быть
Код: sql
1.
2.
select * from tab1, tab2
  where tab1.field1 = tab2.field2



mordegarДля обеих таблиц нужно делать индексы?Конечно.
...
Рейтинг: 0 / 0
14.09.2018, 11:09
    #39702499
mordegar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
Akina,
а индексы уникальные ставить? У меня все значения в строках уникальные, в рамках одной таблицы совпадений нет.
...
Рейтинг: 0 / 0
14.09.2018, 12:12
    #39702563
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
mordegarиндексы уникальные ставить?Если модель требует уникальности - да, иначе лучше не надо...
...
Рейтинг: 0 / 0
14.09.2018, 12:50
    #39702592
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
mordegarДля обеих таблиц нужно делать индексы?я бы сделал только у большей таблицы.
И в запросе меньшую таблицу сделал ведущей, а большую ведомой.
...
Рейтинг: 0 / 0
14.09.2018, 12:59
    #39702597
mordegar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
miksoftя бы сделал только у большей таблицы.
И в запросе меньшую таблицу сделал ведущей, а большую ведомой.

А это как сделать, я имею ввиду ведущую или ведомую. Большую таблицу поставил на процесс индексирования, вот уже час идет.
...
Рейтинг: 0 / 0
14.09.2018, 13:31
    #39702628
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
mordegar , а каково ожидаемое количество записей из этого запроса?
...
Рейтинг: 0 / 0
14.09.2018, 13:58
    #39702661
mordegar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
Akina,

ровно 3, специально их туда внедрил для теста.
...
Рейтинг: 0 / 0
14.09.2018, 14:05
    #39702668
mordegar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
Пока ещё идет индексация большой таблицы. В принципе мне без разницы каким способом все это делать. Мною на другом ресурсе был поставлен вопрос о том, с помощью каких ресурсов можно сделать перебор на совпадения в текстовых файлах от 30 до 100 Гб веса, мне посоветовали SQL, поэтому данный способ и проверяю. Мне в целом и Excel подошел бы по задаче, но у него лимит 1 млн. строк, это где то 40Мб.
Если с sql не получится, даже хз какие ещё варианты использовать.
...
Рейтинг: 0 / 0
14.09.2018, 14:11
    #39702671
mordegar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
Т.е. для ясности, у меня есть файл с 300 млн. значений - базовые, т.е. они в стоке будут всегда. А есть постоянно пополняющийся файл, он может в конечном виде и 1 и 2 млрд. значений иметь, но это не суть, главное своевременно, можно даже по частям, эти значения проверять на совпадения в стоковом файле. И вроде задача то не самая сложная по структуре, но как на практике оказалось, не то что мощностей не хватает, а именно искусственные везде какие-то лимиты, ограничения, и вот так просто не получается.
...
Рейтинг: 0 / 0
14.09.2018, 14:15
    #39702674
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
mordegarmiksoftя бы сделал только у большей таблицы.
И в запросе меньшую таблицу сделал ведущей, а большую ведомой.

А это как сделать, я имею ввиду ведущую или ведомую. Большую таблицу поставил на процесс индексирования, вот уже час идет.Если индекс будет только один, то оптимизатор сам определит таблицу с индексом в ведомые.
Проверить можно в плане запроса.
Если план оптимизатора не устраивает, то порядок соединения таблиц можно указать в запросе явно.
...
Рейтинг: 0 / 0
14.09.2018, 14:23
    #39702678
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
mordegarВ обеих таблицах по одной колонке с данными типа "hC98hvW374hoEd7V8d"Это действительные данные, или некая хитрожопая контрольная сумма?

В теории для такого типа запроса на таких объёмах данных можно создать дополнительное хранимое вычисляемое поле хэша, имеющего целочисленный тип, его проиндексировать, и по нему связывать (вернее, связывать по hash(t1f1)=hash(t2.f2) and t1.f1=t2.f2 ). Но вот незадача - в MySQL есть либо CRC32, чего маловато на таких объёмах, либо MD5, который, наоборот, великоват. А CRC64, который тут был бы в самый раз - увы... хотя никто не запрещает взять, к примеру, первую (или вторую) половину MD5 и преобразовать его в BIGINT. Вероятность коллизии будет достаточно низкой.
...
Рейтинг: 0 / 0
14.09.2018, 14:30
    #39702682
mordegar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
Akina,

Это действительные данные
...
Рейтинг: 0 / 0
14.09.2018, 22:10
    #39702864
NIK.2017
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
Приветствую.
Если исходная информация - текстовые файлы, и проверку надо сделать один раз, возможно, окажется проще:
cat file1 file2 | sort | uniq -d
...
Рейтинг: 0 / 0
14.09.2018, 22:25
    #39702865
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
NIK.2017Приветствую.
Если исходная информация - текстовые файлы, и проверку надо сделать один раз, возможно, окажется проще:
cat file1 file2 | sort | uniq -dСоединять нужно по одному полю, а не по всей строке, насколько я понял задачу.
...
Рейтинг: 0 / 0
14.09.2018, 23:46
    #39702872
mordegar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
miksoftСоединять нужно по одному полю, а не по всей строке, насколько я понял задачу.

Да, но пока жду что получится с индексом, уже 12 часов пыхтит, вроде недолго осталось но места конечно он мне ппц как занял в ходе данной процедуры. Завтра отпишусь, что получится.
...
Рейтинг: 0 / 0
14.09.2018, 23:54
    #39702873
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
Если правильно понял, каждое поле имеет уникальный индекс (ключевое?), а значит, в принципе, вполне может сработать сравнение файлов, состоящих из одного этого поля.

Другой вопрос - алгоритм. Каждое с каждым сравнивать - реально долго.

Если же строки файлов заранее отсортированы, тогда можно составить довольно простой алгоритм в один проход, который прочитает по первой строке из каждого файла, сравнит значения, а далее будет читать и сравнивать строки из того файла, где значение оказалось меньше. При равенстве - вывод значения. Далее прочитать по строчке и пошли по кругу, пока какой-то файл не закончится.

Тут, скорее, вопрос реализации. Возможно СУБД не самое подходящее средство для такой задачи, хотя, отсортированную выгрузку по каждому полю вполне можно сделать.
...
Рейтинг: 0 / 0
15.09.2018, 00:32
    #39702874
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
mordegar,

Покажите DDL таблиц и индекса, который пытаетесь создать.
Если поле для соединения уникально, то лучше было бы сначала его сделать первичным ключом, а потом данные в таблицу заливать.
...
Рейтинг: 0 / 0
15.09.2018, 02:18
    #39702885
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить сравнение огромных таблиц
mordegarВ обеих таблицах по одной колонке с данными типа "hC98hvW374hoEd7V8d", при создании таблиц в настройках ставил маркеры NN и Binar, формат VARCHAR (100).
а они что, разных размеров идут?
и вы конечно же делаете индекс по всей длине?
там 10 чаров хватит
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как ускорить сравнение огромных таблиц / 25 сообщений из 48, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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