我正在尋找如何通過更改(例如)如何優化(如果可能)用於閱讀風信息的SQL
查詢的性能的幫助(請參見下文)。數據庫結構,查詢或其他東西?如何提高風數據SQL查詢性能
我使用託管數據庫來存儲具有超過800,000行風況信息(速度和方向)的表格。從風速計每分鐘添加一次新數據。使用PHP
腳本訪問數據庫,該腳本創建一個網頁,用於使用Google的可視化API繪製數據。
該網頁大約需要15秒才能加載。我已在PHP
和Javascript
部分中添加了一些時間度量,以分析代碼並找出可能需要改進的地方。
我希望改進的一個部分是下面的查詢,它大約需要4秒的時間來執行。查詢的目的是將15分鐘的風速(最小/最大/平均值)分組,並計算測量期間的平均值和總的最小/最大值。
SELECT AVG(d_mean) AS group_mean,
MAX(d_max) as group_max,
MIN(d_min) AS
group_min,
dir,
FROM_UNIXTIME(MAX(dt),'%Y-%m-%d %H:%i') AS group_dt
FROM (
SELECT @i:[email protected]+1,
FLOOR(@i/15) AS group_id,
CAST(mean AS DECIMAL(3,1)) AS d_mean,
CAST(min AS DECIMAL(3,1)) AS d_min,
CAST(max AS DECIMAL(3,1)) AS d_max,
dir,
UNIX_TIMESTAMP(STR_TO_DATE(dt, '%Y-%m-%d %H:%i')) AS dt
FROM table, (SELECT @i:=-1) VAR_INIT
ORDER BY id DESC
) AS T
GROUP BY group_id
LIMIT 0, 360
...
$oResult = mysql_query($sSQL);
該表具有以下結構:
1 ID int(11) AUTO_INCREMENT
2 mean varchar(5) utf8_general_ci
3 max varchar(5) utf8_general_ci
4 min varchar(5) utf8_general_ci
5 dt varchar(20) utf8_general_ci // Date and time
6 dir varchar(5) utf8_general_ci
以下設置用於:
- 數據庫:MariaDB的,42年5月5日-MariaDB的-1〜喘息
- 數據庫客戶端版本:libmysql - 5.1.66
- PHP版本:5.6
- PHP的擴展:mysqli
'5 DT VARCHAR(20)utf8_general_ci //日期和time'不要儲存日期+時間在一個字符字段。使用日期時間或時間戳(如果可用)並且類似於速度和方向:使用整數,數字或甚至浮點類型,但不使用**字符類型來存儲它們。 – wildplasser
你可以發佈解釋和數據模型嗎?另外:請格式化你的代碼,使其變得更可讀。 –
您的問題的很大一部分可能是隱式轉換。這也會讓您在查詢時出現不必要的錯誤風險。只有80萬行可能不是什麼大問題,但仍然是一個問題。和糟糕的設計。 –