我有一個應用程序需要更新大量數據的大量條目。基本上它有7,000個插入和/或更新,但它需要一個懶惰的時間(比如近9分鐘......平均每個查詢約0.08秒)。本質上,我正在尋找一般的加速器來製作多個這樣的請求(我不希望對我的模糊示例有特定的答案......這只是希望能夠幫助解釋)。加速大量的mysql更新和插入
下面是剖析請求一些樣品:
SELECT `habitable_planets`.* FROM `habitable_planets` WHERE (timestamp = '2010-10-15T07:30:00-07:00') AND (planet_id = '2010_Gl_581_c')
INSERT INTO `habitable_planets` (`planet_id`, `timestamp`, `weather_air_temp`, `weather_cell_temp`, `weather_irradiance`, `weather_wind_float`, `biolumin_to_date`, `biolumin_detected`, `craft_energy_usage`, `craft_energy_consumed_to_date`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
SELECT `habitable_planets`.* FROM `habitable_planets` WHERE (timestamp = '2010-10-15T07:45:00-07:00') AND (planet_id = '2010_Gl_581_c')
INSERT INTO `habitable_planets` (`planet_id`, `timestamp`, `weather_air_temp`, `weather_cell_temp`, `weather_irradiance`, `weather_wind_float`, `biolumin_to_date`, `biolumin_detected`, `craft_energy_usage`, `craft_energy_consumed_to_date`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
重複生厭(當然,約7000倍)。這是一個收集24小時內間隔生成的數據的更新,然後每天對數據庫進行一次大規模更新。鑑於我已經顯示的有限的位,你是否有任何建議加快這個過程?
例如......它是否有意義,而不是爲每個時間戳做一個選擇,一次選擇一個範圍,然後在腳本中迭代它們?
依稀像:
foreach ($foo as $bar)
{
if ($bar['timestamp'] == $baz) // where $baz is the needed timestamp
{
// do the insert here
}
}
編輯:要有點添加到此,一兩件事,在我的情況好轉反應是
SELECT `habitable_planets`.* FROM `habitable_planets` WHERE (planet_id = '2010_Gl_581_c')
導致對$foo
,然後做分配更改一堆檢查現有記錄的代碼,並根據結果執行插入操作或更新,以使用SQL查詢語句INSERT... ON DUPLICATE KEY UPDATE
。這導致我在特定情況下的速度增加了大約30%,因爲它至少減少了一次到數據庫的行程,並且超過了成千上萬的請求。
+1。良好的綜合答案。 – sberry 2010-10-18 15:10:52