Эффективный способ получить частотное распределение значений в большой таблице 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
Другие вопросы по тегам