[SQL]

背景

系统将数据对象JSON序列化后存放到数据库字段中。
Report 模块需要获取实时数据对象数值,当前在SQL中进行数值判断的耗时长,效率低。

分析

当前执行效率低主要是程序结构设计的不合理。

SQL瓶颈如下,这里的 wordstr 为统计关键字,7 为 wordstr 的字符串长度。

sum((LEN(@colName) - LEN(REPLACE(@colName, 'wordstr', '')))/7)

解决

思路1:使用代码方式重新实现一遍统计功能。
问题:程序结构改动量大,工作量大,暂不采用。

思路2:优化数据结构,缓存统计变量。
2.1 添加 "统计结果" 字段,用于保存每一行记录的统计关键值。
2.2 更新数据表所有 "统计结果" 字段。
2.3 新建触发器,自动更新 Insert, Update 行记录变更。
2.4 更新报表SQL,直接从 "统计结果" 获取结果。

原文地址:https://www.cnblogs.com/jinzesudawei/p/7471943.html