2012-07-21 50 views
2

我有两个表格, Total_Data and Distinct_S1在大型MySql表中获取数值频率分布的有效方法

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

Distinct_S1有100万行。字段:“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

您可以使用多表更新语法和连接一起更新所有行。有关语法,请参阅manual

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

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

我跑你上面的查询。 13分钟后,结束了!非常感谢!附:我猜更新比插入更昂贵,'python-to-mysql-to-python transition'可能花费了很多时间。 – yang5 2012-07-21 18:49:13