这是我以前的帖子How to improve wind data SQL query performance的后续。使用算术和几何计算加速SQL SELECT
我已经扩展了SQL语句,以执行使用circular statistics来计算平均风向的第一部分。这意味着我想计算风向的余弦和正弦的平均值。在我的PHP脚本中,我将执行第二部分并计算反切线并在必要时添加180或360度。
风向存储在我的表格中,因为在'dirvolt'字段中从传感器读取电压,所以我首先需要将其转换为弧度。
用户可以通过使用分页函数后退来查看历史风力数据,因此使用LIMIT这些值是在我的PHP脚本中动态设置的。
我的SQL语句目前看起来是这样的:
SELECT ROUND(AVG(speed),1) AS speed_mean, MAX(speed) as speed_max,
MIN(speed) AS speed_min, MAX(dt) AS last_dt,
AVG(SIN(2.04*dirvolt-0.12)) as dir_sin_mean,
AVG(COS(2.04*dirvolt-0.12)) as dir_cos_mean
FROM table
GROUP BY FLOOR(UNIX_TIMESTAMP(dt)/300)
ORDER BY FLOOR(UNIX_TIMESTAMP(dt)/300) DESC
LIMIT 0, 72
查询需要大约3-8秒,这取决于我使用的值对数据进行分组(在上面的代码300)运行。
为了让我学习,有什么我可以做的,以优化或改善SQL语句,否则?
您正在使用哪个数据库? – ipinak
我猜你仍然使用与链接到的问题相同的数据库... –
你可以在该查询上运行'EXPLAIN'吗? –