Эффективный способ получить частотное распределение значений в большой таблице MySql
У меня есть две таблицы, а именно. Total_Data и Distinct_S1.
Total_Data имеет 3,5 миллиона строк. Поля: "S1", "S2", "S3", "S4"
Distinct_S1 имеет 1 миллион строк. Поля: "S1", "частота". "S1" Distinct_S1 состоит из всех различных значений, которые встречаются в "S1" Total_Data.
Задача под рукой: "частота" Distinct_S1 для S1 = "xxyy" (предположим) должна состоять из числа случаев, когда "xxyy" встречается в Total_Data.
Я использовал следующий запрос из скрипта Python (MySQLdb импортирован) для выполнения поставленной задачи:
cur.execute("update Distinct_S1 set frequency=(select count(*) from Total_Data where S1='%s') where S1='%s'"%(S1_val, S1_val)
Приведенный выше запрос работает нормально, но, похоже, он занимает много времени. Есть ли другой быстрый способ добиться того же?
1 ответ
Вы можете использовать синтаксис обновления нескольких таблиц с объединением, чтобы обновить все строки одновременно. Смотрите руководство по синтаксису.
Но гораздо более простой способ - это также вставить все значения в таблицу напрямую, предварительно не заполняя ее разными значениями.
INSERT INTO Distinct_S1 (S1, frequency)
SELECT S1, COUNT(*)
FROM Total_Data
GROUP BY S1