【问题标题】:Efficient way to get frequency distribution of values in a large MySql table获取大型 MySql 表中值频率分布的有效方法
【发布时间】:2012-07-20 15:15:12
【问题描述】:

我有两张桌子,即。 Total_DataDistinct_S1

Total_Data 有 350 万行。字段:“S1”、“S2”、“S3”、“S4”

Distinct_S1 有 100 万行。字段:“S1”、“频率”。 Distinct_S1 的“S1”由 Total_Data 的“S1”中出现的所有不同值组成。

手头的任务: S1 = 'xxyy' 的 Distinct_S1 的“频率”(假设)应包含 Total_Data 中出现 'xxyy' 的次数。

我在 python 脚本(导入 MySQLdb)中使用了以下查询来完成手头的任务:

cur.execute("update Distinct_S1 set frequency=(select count(*) from Total_Data where S1='%s') where S1='%s'"%(S1_val, S1_val)

上述查询工作正常,但似乎需要很多时间。有没有其他更快的方法来达到同样的效果?

【问题讨论】:

    标签: mysql mysql-python frequency-distribution large-data


    【解决方案1】:

    您可以使用带有连接的多表更新语法一次更新所有行。语法见manual

    但更简单的方法是直接在表中插入所有值,而无需先用不同的值填充它。

    INSERT INTO Distinct_S1 (S1, frequency)
    SELECT S1, COUNT(*)
    FROM Total_Data
    GROUP BY S1
    

    【讨论】:

    • 我运行了您的上述查询。 13分钟后,大功告成!非常感谢!附:我猜更新比插入更昂贵,“python-to-mysql-to-python 转换”可能需要很多时间。
    猜你喜欢
    • 1970-01-01
    • 2013-03-11
    • 2011-03-11
    • 2017-12-23
    • 2013-02-09
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多