数据库交互之减少IO次数
一个对程序有要求的人一定会尽量去想办法减少IO次数来减少响应时间,但是又不能一味地为了减少IO次数而一直占用连接池。数据库连接一开一关也是需要耗费时间的,下面以SqlServer为例列举几种常见的减少IO的方式,
热衷于写sql语句的朋友可以看看,说的不好的地方还望指正。
一、多条语句同时执行。例如:新增一条记录之后马上返回该条记录的ID,这里是最常见的多条语句同时执行列子(insert into xxx(a,b,c,d) values(A,B,C,D); select @@identity;)
二、存储过程。例如:分页查询,具体代码就不列出来了,有点长,网上一搜一大把。
三、连接查询(同库连接,异库连接)。select * from A left join B on A.ID=B.XID (以左边为基准与右边进行连接), 类似的有right join 和 inner join ,至于选左连接还是右连接,就看哪边的数据量大点,以数据量少的为基准就是了。
四、打开连接不关闭,直到全部语句执行完再关闭。这种一般会用在系统迁移上面做数据搬迁,过程时间长,出错可能性较大,其他的情况就不要用这种,因为连接池一直占着,别人进不来。
五、多条语句配合变量使用。前不久我做订单功能开发的时候就用到过,获取不同状态的订单数量,不想分多次获取,declare @statesCount varchar(1000); declare @count int ;set @statesCount='';
[select @count = Count([ID])from [SoftPackageOrder] where State={0} and [Uid]={1}; set @statesCount= @statesCount+ '{0}' +'+'+ convert(varchar(20),@count)+','][这里多少个状态,多少条语句]
select @statesCount;// 结果为: [85+3,86+1,87+2,88+1, ] [状态1+数量,状态2+数量,] 附上C#结果处理部分代码
Dictionary<int, int> resultDic = new Dictionary<int, int>();
string[] result = orderCounts.Substring(, orderCounts.Length - ).Split(new char[] { ',', '+' }); int count = result.Length / ;
for (int i = ; i < count; i++)
{
resultDic.Add(Convert.ToInt32(result[ * i]), Convert.ToInt32(result[ * i + ]));
}
六、新增数据时,对于某个列不可重复插入数据,一个sql语句搞定。if not exists (select [ID] from A where xx='xx') insert into A ('xx','ddd')
七. 一对多表的多表里面,只取一条最新的记录
select Psn,ID from [OrderProducts] as a
where ID = (select max(b.ID)
from [OrderProducts] as b
where a.Oid = b.Oid ) and ID between and and Oid !='' group by Oid,Psn,ID order by ID desc
数据库交互之减少IO次数的更多相关文章
- Java豆瓣电影爬虫——减少与数据库交互实现批量插入
节前一个误操作把mysql中record表和movie表都清空了,显然我是没有做什么mysql备份的.所以,索性我把所有的表数据都清空的,一夜回到解放前…… 项目地址:https://github.c ...
- .NET应用程序与数据库交互的若干问题
我们知道,在应用程序中与数据库进行交互是一个比较耗时的过程,首先应用程序需要与应用程序建立连接,然后将请求发送到数据库,数据库执行操作,然后将结果集返回.所以在程序中,要尽量晚的与数据库建立连接,并且 ...
- OAF_JDBC系列1 - 数据库交互取值方式(案例)
2014-06-15 Created By BaoXinjian
- IDEA项目搭建八——使用MybatisPlus简化数据库交互
一.MybatisPlus简化数据库交互 我们使用Mybatis发现需要在mapper.xml中写很多重复的简单CRUD(增删改查),使用MybatisPlus可以大大简化这部分代码,官方文档http ...
- java与数据库交互常用到的一些方法
下面我整理了一下java中常用的几个与数据库交互的常用方法,仅供参考: 1.执行SQL(dao层的实现类中) (1)SQL查询: //import org.hibernate.Query;//impo ...
- 通过数据库评估存储设备IO性能-Oracle11gIO校准功能介绍
通过数据库评估存储设备IO性能 ---------Oracle11g IO校准功能介绍 前言 I/O子系统是ORACLE数据库的一个重要组成部分,因为I/O操作是贯穿数据库管理全过程,它操作的对象包括 ...
- Android通过Web与后台数据库交互
2021.1.27 更新 已更新新版本博客,更新内容与原文章相比有点多,因此新开了一篇博客,请戳这里. 1 背景 开发一个App与后台数据库交互,基于MySQL+原生JDBC+Tomcat,没有使用D ...
- 使用Mybatis的一些基本配置及Mybatis与数据库交互测试验证
1.简介 什么是MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.My ...
- 说说Java程序和数据库交互的乱码解决
本文就本人遇到的问题进行讲解 1.通过jdbc直连方式,连接Mysql数据库,从程序向数据库中写入数据出现的乱码解决方案. 当通过程序向Student表中写入一条数据时,写入数据库的内容会产生乱码. ...
随机推荐
- Redis(REmote DIctionary Server)基础
Redis(REmote DIctionary Server)基础 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Redis是一个开放源代码(BSD许可)的内存数据结构存储,用作数 ...
- ACM-ICPC 2018 徐州赛区网络预赛 A Hard to prepare(递推)
https://nanti.jisuanke.com/t/31453 题目 有n个格子拉成一个环,给你k,你能使用任意个数的0 ~ 2^k - 1,规定操作 i XNOR j 为~(i ^ j), ...
- RMQ(ST表)
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int N, M, ...
- 前端面试题整理—jQuery篇
1.为什么使用jquery,他有哪些好处? 1)轻量级.代码简洁 2)强大的选择器,出色的DOM操作封装 3)有可靠的事件处理机制 4)浏览器兼容性好 5)支持链式操作 6)支持丰富的插件 2.jqu ...
- 14、使用csv和excel存储豆瓣top250电影信息
记得我们第三关的时候爬取了豆瓣TOP250的电影名/评分/推荐语/链接,现在呢,我们要把它们存储下来,记得用今天课上学的csv和excel,分别存储下来哦- URL htt ...
- [再寄小读者之数学篇](2014-06-27 向量公式: The Hall term)
$$\bex \n\cdot{\bf b}=0\ra \n\times [(\n\times {\bf b})\times {\bf b}]=\n\times [\n\cdot ({\bf b}\ot ...
- 使用SO_REVTIMEO套接字选项为recvfrom设置超时
void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen) { int n; ]; struct timeval ...
- iTOP-iMX6UL全能板-linux-usb-wifi的使用
本文档介绍的是在本文档介绍的是在 Linux 系统环境下iTOP-imx6ul全能版 usb wifi 连接路由器上网 实验调试步骤.我们使用的是 imx6ul 全功能底板. 1 硬件 本文档测试使用 ...
- jQuery.rotate.js(控制图片转动)
jQuery.rotate.js笔记 1. jQuery.rotate.js是什么 一个开源的兼容多浏览器的jQuery插件用来对元素进行任意角度的旋转动画. 这个库开发的目的是为了旋转img的, ...
- 预置app/apk到系统 && 预置so库进系统 && 预置普通文件和文件夹进系统
https://blog.csdn.net/zhandoushi1982/article/details/4695460