powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как ускорить сравнение огромных таблиц
25 сообщений из 48, страница 1 из 2
Как ускорить сравнение огромных таблиц
    #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
Как ускорить сравнение огромных таблиц
    #39702460
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegar2 gtx1080ti вообще прохлаждаются на 0% загрузки
GPU-то тут при чём?

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

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

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

Мне нужно чтобы каждую строку из файла 20млн. строк проверил на совпадения в файле с 300 млн. строк.
Как меня уверяли, что база sql легко с этим справится за пару минут, и ничего там настраивать не надо особо, что такое ключи и прочее я хз, мне сказали поставить флажки и выбрать варчар (100), дальше типа по команде пойдет сравнение с богоподобной скоростью.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702469
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не ключи а индексы
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702482
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как и куда эти индексы ставить в workbenchе?
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702486
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarкак и куда эти индексы ставить в workbenchе?
создали таблицы, залили данные, прописали индексы
именно в таком порядке
заливать в таблицу с индексами в разы дольше
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702491
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для обеих таблиц нужно делать индексы?
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #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
Как ускорить сравнение огромных таблиц
    #39702499
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
а индексы уникальные ставить? У меня все значения в строках уникальные, в рамках одной таблицы совпадений нет.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702563
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarиндексы уникальные ставить?Если модель требует уникальности - да, иначе лучше не надо...
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702592
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mordegarДля обеих таблиц нужно делать индексы?я бы сделал только у большей таблицы.
И в запросе меньшую таблицу сделал ведущей, а большую ведомой.
...
Рейтинг: 0 / 0
Как ускорить сравнение огромных таблиц
    #39702597
mordegar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftя бы сделал только у большей таблицы.
И в запросе меньшую таблицу сделал ведущей, а большую ведомой.

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

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

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

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

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

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

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

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

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

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


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