首先声明,本人所有博客均为原创,谢绝转载!

今天接到一个需求,如下

这里解释一下,为什么是几十条,因为这里面每个公式的每个条件都是一个单独的数据如净利润就是一条sql语句,而且分散在不同的表,如果此方法按照常规方法来做,为了与指标名称对应的话,那么我们就必须要一个条件一个条件的去查,然后再进行计算.

但是这样就出现了一个问题,大家都知道,在程序里,在不出现死锁的情况下,本地运行的代码其实并不耗多少时间,真正耗时间的是那些需要远程通信的,因为有一个通信时间,而我们查数据库就是一个远程通信的过程.所以,如果按照常规方案来做的话,那我们这个时间消耗

就是无法接受的,当然,按照普通方法做也不是没有解决方案的,那么就是在用户刚刚进入我们这个系统的时候,就单独开个线程去加载数据,然后存到缓存里,然后每隔一分钟就定时去刷一次数据.不过,用这种方案显然不是我的风格,所以,我就试图寻找这些条件的规律

首先,我发现这些条件是有唯一性字段的,也就是说我需要拿到这个唯一性字段然后将其跟我们现在的中文字面条件来对照下,这样的话,我就只需要根据唯一性字段把数据一次性全部查出来,然后根据唯一性字段存到缓存里即可,但是!!!这些唯一性字段是根据表来得,也就是说,不同的表可能有相同的唯一性字段,但这却是两个条件,所以,在其之上,还要加个表的区分,这个往后看自然就懂了,首先,我打开了数据库

哎呀妈呀,这要把头都看晕啊,既然这样,只好写个脚本把数据清洗一下了

nice,这才是我想要的效果,最后变成了这样

OK,这是满足了我拿数据的需求了,但我拿到数据后怎么封装呢?(在看下图之前首先,千万不要纠结我查数据的方式,这不属于任何框架的用法,是我根据自己的业务开发的一个封装条件(pinjiesql)和封装了jdbc的一个工具类(tableSQLUtiles)可能并不适合你的业务,看懂大概意思就行,我的命名还是

很规范的)

最后,再把条件按照我们之前定义的规则来计算

也就是这样

如何将一个本来需要发几十条sql语句的需求优化成两条(非sql语句优化,而是解决方法)的更多相关文章

  1. mssql sqlserver两条求和sql脚本相加的方法分享

    转自:http://www.maomao365.com/?p=7205 摘要: 下文分享两条sql求和脚本,再次求和的方法分享 /* 例: 下文已知两条sql求和脚本,现需对两张不同表的求和记录再次求 ...

  2. 系统安装SQL Sever2000后1433端口未开放,如何打开1433端口的解决方法

    这篇文章主要针对Win2003系统安装SQL Sever2000后1433端口未开放,如何打开1433端口的解决方法. 用了几年的Windows2003和SQL Server2000了,不过这个问题倒 ...

  3. SQL 远程过程调用失败【0x800706be】或正在关闭 【0x80041033】解决方法

    在SQL Server 配置管理器中出现[远程过程调用失败.[0x800706be]]或者[正在关闭 [0x80041033]]错误,如图所示 上网查找发现时SQL2008与VS2012或VS2013 ...

  4. MySQL(Navicat)运行.sql文件时报错:[Err] 2006 - MySQL server has gone away 的解决方法

    背景: 今天导入一个数据量很大的.sql文件时,报错: 原因: 可能是sql语句过长,超过mysql通信缓存区最大长度. 解决:1. 编辑 MySQL 安装目录下的 my.ini,在最后添加以下内容: ...

  5. sql server 作业导出放到另外一台机器执行时报错的解决方法

    SQL Server2008脚本创建作业失败,提示: 引用内容消息 515,级别 16,状态 2,过程 sp_add_job,第 137 行不能将值 NULL 插入列 'owner_sid',表 'm ...

  6. sqlserver -- 学习笔记(二)“SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问”解决方法

    将数据表导出到excel时出现下面错误: SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而 ...

  7. Spring JdbcTemplate的queryForList(String sql , Class<T> elementType)返回非映射实体类的解决方法

    Spring JdbcTemplate的queryForList(String sql , Class<T> elementType)易错使用 一直用ORM,今天用JdbcTemplate ...

  8. SQL Server 2008登录错误:无法连接到(local)的解决方法

    1.服务器类型我们选择了“数据库引擎”时,查找里面的可登录用户名是没有的,下边的服务器名称只显示为“(local)”,连“Windows 身份验证”都无法登录. 如果朋友们和我出错的问题是一样请看下面 ...

  9. SQL Server 2008“备份集中的数据库备份与现有的数据库不同”解决方法

    对于SQL Server 2008,有几个地方是要注意的,比方在还原数据库时,不像2000里边将数据库和文件区分的很细, 统一均为文件,这就使还原的数据库文件制定为. bak.那么想还原2000的数据 ...

随机推荐

  1. 转-CoreText 使用教程

    转自:http://www.dapps.net/dev/iphone/how-to-create-a-simple-magazine-app-with-core-text.html Core Text ...

  2. mvc的生命周期

    尽管每次都是从msdn里复制粘贴,但是还是有必要的,加深对mvc的理解和官方的表述. 了解 MVC 应用程序执行过程 发送给基于 ASP.NET MVC 的 Web 应用程序的请求首先通过 UrlRo ...

  3. 掌握Spark机器学习库-01

    第1章 初识机器学习 在本章中将带领大家概要了解什么是机器学习.机器学习在当前有哪些典型应用.机器学习的核心思想.常用的框架有哪些,该如何进行选型等相关问题. 1-1 导学 1-2 机器学习概述 1- ...

  4. spark 学习路线及参考课程

    一.Scala编程详解: 第1讲-Spark的前世今生 第2讲-课程介绍.特色与价值 第3讲-Scala编程详解:基础语法 第4讲-Scala编程详解:条件控制与循环 第5讲-Scala编程详解:函数 ...

  5. 遮罩 HUD 指示器 蒙板 弹窗

    遮罩 HUD 指示器 蒙板 弹窗 UIAlertView的使用<代理方法处理按钮点击> UIAlertView *alertView = [[UIAlertView alloc] init ...

  6. 解决qt提示:qt.network.ssl: QSslSocket: cannot call unresolved function DH_free和qt.network.ssl: QSslSocket: cannot call unresolved function d2i_DHparams

    转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=7127254 运行环境:VS2015&Qt5.8 方法一(未能解决):把C:\Qt\Q ...

  7. asterisk-java ami4 一些基本功能的例子

    比如:挂机,拨号,拨外线,保留通话,示闲,示忙等等.... 在api中可以获得这些方法说明 /**  * 给分机挂机  * @param Extension 要挂机的分机号  * @return  * ...

  8. 计算器Pro应用项目源码

    本计算器实现了一些简单的功能,可能本身还存在一些缺陷,希望大家提建议,能够改进一下. 源码项目我已经上传到源码天堂那里了:http://code.662p.com/list/11_1.html < ...

  9. C/C++ 数组、字符串、string

    1.定义数组时,数组中元素的个数不能是动态的,不能用变量表示(const变量可以),必须是已知的. 2.引用数组时只能引用数组中某个元素,不能引用整个数组. 3.定义二维数组时,若同时全部初始化,则可 ...

  10. iOS UI 顶级布局

    状态栏. 导航栏. tabbar. uiviewcontroller视图区域.