博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
评《撸一段 SQL ? 还是撸一段代码? 》
阅读量:6593 次
发布时间:2019-06-24

本文共 762 字,大约阅读时间需要 2 分钟。

    最近看到一篇博客《》,文章举例说明了一个连表查询使用程序code来写可读性可维护性更好,但是回帖意见不一致,我想作者在理论层面没有做出更好的论述,而我今天才回帖结果发现不能回帖了,于是单独写此文随记。

  木桶定律    

    连表查询的确应该尽量避免,虽然普通情况下一条连表查询的SQL效率比两个for循环效率更高,但是我们应该知道大量依靠复杂SQL查询的应用程序,数据库很容易成为瓶颈,但应用程序所在的服务器却比较空闲,那么此时应用程序表现的结果就是等待数据库返回查询结果,总体时间更长了,这也是“木桶定律”在软件中的体现,因此,正确之道是要使得系统各个节点不要出现短板,在不使用连表查询的情况下,我们可以将表分散到不同的数据库,实现分库分表,并结合并行查询,总体上提高系统资源利用率,提高程序执行效率。

    当然,上面的结论也有前提,就是每次查询的网络IO不能成为瓶颈,否则还是在数据库中执行连接操作比较合适,如果有密集的查询并且每次涉及大量IO,这种情况下甚至应该使用存储过程,所以到底是应该写在code中还是写SQL,应该具体问题具体分析。

   二八原则

    根据绝大部分项目实际情况,80%的查询都是一些简单的单表查询和连表查询,这部分查询用ORM是很合适的,结合缓存的确能够很大程度上提升系统效率;而剩下的20%查询涉及复杂的SQL和大量的IO,此时应该直接使用SQL或者存储过程,所以一个项目我们选择数据层框架的时候,需要它既支持ORM,也支持SQL,但应该是高级别的支持SQL,集中管理或者配置SQL的形式,类似iBatis框架那样的SQL-MAP功能。如果有大量表单,还应该考虑这样的数据层框架能够支持数据控件绑定。所以一个优秀的数据层框架应该同时具备ORM,SQL-MAP,Data Controls 功能,有一款国产的值得推荐!

转载地址:http://tedio.baihongyu.com/

你可能感兴趣的文章
查看nginx/apache/php/mysql编译参数
查看>>
怎样将lib设为源文件夹
查看>>
第八周作业
查看>>
Apache Spark源码走读之8 -- Spark on Yarn
查看>>
ABP官方文档翻译 3.6 工作单元
查看>>
战力10
查看>>
最大流算法思想和理论的简单理解
查看>>
数据库--MyBatis的(insert,update,delete)三种批量操作
查看>>
谈谈Vue.js——vue-resource全攻略
查看>>
源路由 就是指定数据传输经过这个路由服务器
查看>>
关于计算一对亲和数的探索
查看>>
Codeforces Round #566 (Div. 2) C. Beautiful Lyrics
查看>>
SQL 在OPENQUERY中使用参数
查看>>
Yii2 配置yii2-redis扩展
查看>>
CentOS下搭建LNMP+WordPress+http2.0教程
查看>>
正则表达式
查看>>
github使用小知识点查阅
查看>>
手把手教你画嘴巴,以后再也不怕画嘴巴了
查看>>
Python数据挖掘与机器学习_通信信用风险评估实战(1)——读数据
查看>>
发个项目需求大家瞅瞅
查看>>