2012-07-21 31 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