sql查询优化注意事项及n个表连接查询优化方案

基础知识:

sql编写注意事项:1.严禁超过三个表做连接查询。

                              2.涉及状态字典类(有限状态信息)的信息可以在代码的业务逻辑中匹配

                              3.In 不会使用索引,可以用 a=1 or a=2 or a=3  注意or的所有字段都要是索引字段,否则也不使用索引; 或者使用between and  或者使用 >    < 来匹配

                              4.尽量使用复合索引

                              5.连接查询效率高于子查询

                             6.比如字段a: 若字符串类型的字段,where后的查询语句要使用a=‘123’ ;  若为INT类型的查询语句应该使用a=123 ,双引号‘’ 在字符串的类型一定要出现

                             7.长字段类型要建立索引,只用建立前3位字符到前5位字符为索引

                             8.like 模糊查询 %abc%,若要使用索引,前面的%就不要加上了。

                             9.单表数据量特别大,切记不要使用全表连接查询。

因业务必须需要n个表做连接查询(n>3)的解决方案: 分析业务中主业务数据及附属业务数据;

比如:复杂类型报表,展示的内容是有合同信息,审批信息,放款信息,车辆信息,经销商信息等等共100多个字段,若单纯一个连接查询,则该sql必然是很长,效率很慢。

那么分析该报表内容中那些是主模型信息,那些是附属模型信息; 分析清楚后,

在代码实现中:先分页(如果需要分页的话)查询主模型对象信息,然后根据主模型对象信息应用多线程并行查询(核心关键类:CountDownLatch,Thread )其他附属模型信息;

然后在用ConcurrentHashMap对象(时间复杂度O(1)),把主模型信息与附属模型信息做匹配对应,最终组装成完整的业务对象DTO,大幅度降低响应时间,可充分利用CPU,减轻数据库压力,避免死锁。

该方案适用场景:1.业务需要n>3表的连接查询

                           2.有部分表的单表数据量很大

建议:1.大家了解数据连接查询原理,数据库索引原理,在适当的时候用连接查询,但是连接查询的弊端是增加数据库的负载,且在一些情况下存在过大消耗数据库的计算资源,引发其他不必要的问题。

           2.数据库是业务系统很重要的中间件,且影响是全局性的,一般用于存储数据,复杂计算尽量使用代码实现,以便充分利用应用服务服务器性能,减轻数据库压力。

           3.如果有兴趣的朋友,可以了解下为什么要使用CountDownLatch,ConcurrentHashMap 对象,一定会让您有所收获。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值