使用PostgreSQL计数查询优化PHP脚本
我在一个非常简单的任务中遇到了一些性能问题(执行速度),如下所述。我的代码无法在此处显示,因此我将详细解释该问题: 考虑以下sql表,该表存储了~12年的每日降雨量数据: 历史数据使用PostgreSQL计数查询优化PHP脚本,php,sql,postgresql,Php,Sql,Postgresql,我在一个非常简单的任务中遇到了一些性能问题(执行速度),如下所述。我的代码无法在此处显示,因此我将详细解释该问题: 考虑以下sql表,该表存储了~12年的每日降雨量数据: 历史数据 现在,考虑另一个结构相同的表,但保持1年的每日预测数据: 预测 问题是:对于预测数据的每一天,计算历史数据中相同的(月、日),以便观察到的降雨量>降雨量预测 例子 考虑预测条目 year = 2013, month = 3, day = 15, rainfall_forec = 10 然后,我需要计算每个月=3天=
现在,考虑另一个结构相同的表,但保持1年的每日预测数据:
预测 问题是:对于预测数据的每一天,计算历史数据中相同的(月、日),以便观察到的降雨量>降雨量预测 例子 考虑预测条目year = 2013, month = 3, day = 15, rainfall_forec = 10
然后,我需要计算每个月=3天=15天的历史数据,其中观测到的降雨量>10(使用SQL很容易)。因此,我的输出是一个列表,其中包含每个预测日的计数
有很多方法可以做到这一点:
1-在for循环中使用SQL查询(每个预测日1个查询=循环中365个查询-我还没有测试它)
2-查询所有观察到的数据并使用嵌套循环进行比较(~365*12*365比较…)
3-将上述内容或数学与日期混合使用(但这里缺少数据是一个问题)
我目前正在使用选项2,但我需要它更快。我将尝试选项1,但可能我缺少一个更简单的解决方案
所以,我很感激任何关于如何解决这个问题的建议。谢谢 您可以尝试以下查询:
SELECT r_for.year, r_for.month, r_for.day, count(r_for.rainfall_forec)
FROM forecast AS r_for
RIGHT JOIN historic_data AS r_obs
ON r_for.month = r_obs.month
AND r_for.day = r_obs.day
AND r_obs.rainfall_observed > r_for.rainfall_forec
GROUP BY r_for.year, r_for.month, r_for.day
您可以尝试以下查询:
SELECT r_for.year, r_for.month, r_for.day, count(r_for.rainfall_forec)
FROM forecast AS r_for
RIGHT JOIN historic_data AS r_obs
ON r_for.month = r_obs.month
AND r_for.day = r_obs.day
AND r_obs.rainfall_observed > r_for.rainfall_forec
GROUP BY r_for.year, r_for.month, r_for.day
您需要的输出具体是什么?只是一个365个计数的列表?是的,输出是一个计数数组,包含365个项目。您需要的输出是什么?只是一个365个计数的列表?是的,输出是一个计数数组,包含365个项目。有一些可以帮助您。但是它通常不是默认安装的,所以您需要访问数据库服务器。这可能会对您有所帮助。但它通常不是默认安装的,因此您需要访问数据库服务器。
SELECT r_for.year, r_for.month, r_for.day, count(r_for.rainfall_forec)
FROM forecast AS r_for
RIGHT JOIN historic_data AS r_obs
ON r_for.month = r_obs.month
AND r_for.day = r_obs.day
AND r_obs.rainfall_observed > r_for.rainfall_forec
GROUP BY r_for.year, r_for.month, r_for.day