继上篇博客的开发任务,为减小前台处理的数据量,在后台查询时对SQL进行优化,对如下所示表进行双分组查询
对于group by的理解参考链接: 关于group by的用法 原理.
需求:根据时间分组求不同时间组内部 不同缺陷名称的缺陷个数与面积之和 两个group by

原SQL:
SELECT
PRODUCE_TIME,
DEFECT_COUNT,
DEFECT_AREA,
DEFECT_CNAME
FROM
BGTAMAQA.T_ADS_FACT_HR_DEFECT_STATISTICS
WHERE
1=1
AND DEFECT_CNAME NOT IN ('NULL','',' ')
AND PRODUCE_TIME >= '20201202092942'
AND PRODUCE_TIME <= '20210205092942'
group by PRODUCE_TIME
ORDER BY
PRODUCE_TIME DESC,
DEFECT_CNAME DESC
FETCH
FIRST 49999999 rows only
改为:
SELECT
sum(DEFECT_COUNT),
sum(DEFECT_AREA),
SUBSTR(PRODUCE_TIME,1,10) as TIME,
DEFECT_CNAME
FROM
BGTAMAQA.T_ADS_FACT_HR_DEFECT_STATISTICS
WHERE
1=1
AND DEFECT_CNAME NOT IN ('NULL','',' ')
AND PRODUCE_TIME >= '20201202092942'
AND PRODUCE_TIME <= '20210205092942'
group by
SUBSTR(PRODUCE_TIME,1,10),DEFECT_CNAME
order by TIME
FETCH
FIRST 49999999 rows only
原理:
执行Group BY 后,想象生成了虚拟表3,多行合并,所有的其他字段值写到一个单元格里面。单元格中是不允许有多个值的,所以就必须配合聚合函数使用group by语句了
什么是索引.
不借助任何索引结构快速定位的话,查找某条记录,就要逐行去查找比较。
但如果对该列数据构建了二叉树、红黑树等数据结构的索引,将字段值全部放在该数据结构中,查找时就会快很多(例如根据值大小构建二叉排序树实现快速查找)
数据库索引有哪些呢?
(明明自己的项目需求,自己记录的知识跟我说检查转载…明明不一样,绝了)
本文探讨了如何通过调整SQL语句,对BGTAMAQA项目中的数据进行双分组查询,即按时间与缺陷名称汇总缺陷数量和面积。通过去除冗余字段并使用GROUP BY和SUM函数,提升了后台查询性能,同时介绍了索引在查询速度上的关键作用。

被折叠的 条评论
为什么被折叠?



