MariaDB 10.4查询或子查询优化

MariaDB 10.4查询或子查询优化,mariadb,query-optimization,mariadb-10.4,Mariadb,Query Optimization,Mariadb 10.4,有没有办法优化这种查询 请参阅下面给出的示例 Select KPI.*, (select sum(NP_2g_crfs) from kpi_table where date_upload = '14/01/2020') as num_sum, (select sum(NP_2g_den) from kpi_table t1 where t1.id >= kpi_table .id) den_sum, (select sum(NP_2g_num) from kpi_table t1 whe

有没有办法优化这种查询

请参阅下面给出的示例

Select KPI.*,
(select sum(NP_2g_crfs) from kpi_table where date_upload = '14/01/2020') as num_sum, 
(select sum(NP_2g_den) from kpi_table t1 where t1.id >= kpi_table .id) den_sum,
(select sum(NP_2g_num) from kpi_table t1 where t1.id >= kpi_table .id) num_sum, 
(select sum(NP_2g_num) from kpi_table t1 where t1.id >= kpi_table .id) /
(select sum(ROUND(NP_2g_den, 2)) from kpi_table t1 where t1.id >= kpi_table .id) kpi
from kpi_table 
WHERE date_upload = '14/01/2020'
装载时间长达5分钟,共5000行

提前感谢。

窗口函数SUM()应该比这些相关子查询执行得更好:

SELECT *,
  SUM(NP_2g_crfs) OVER() num_sum, 
  SUM(NP_2g_den) OVER (ORDER BY id DESC) den_sum,
  SUM(NP_2g_num) OVER (ORDER BY id DESC) num_sum, 
  SUM(NP_2g_num) OVER (ORDER BY id DESC) / SUM(ROUND(NP_2g_den, 2)) OVER (ORDER BY id DESC) kpi
FROM kpi_table 
WHERE date_upload = '2020-01-14'

请添加表格定义和解释计划。日期是否以非标准mysql格式存储为字符数据类型?同样,对同一个表进行5次解析也不太可能是有效的。对您试图实现的目标进行解释会很有帮助。如果相同的表和条件不需要使用子查询。@Naveed Ramzan不确定该OP是否希望获得2020年1月14日的行和当前id和所有未来id的总和。这是否有意义是另一回事,NP_2g_num和NP_2g_CSFR是小数(10,2),而NP_2g_den是整数(11),是吗?这不会影响性能。在我的版本上使用OVER()加载的时间太长您说的加载时间太长是什么意思?它的性能是否比您的查询差?当我尝试此操作时,我的phpadmin查询崩溃。