数据库交互之减少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表中写入一条数据时,写入数据库的内容会产生乱码. ...
随机推荐
- Pandas系列(十四)- 实战案例
一.series import pandas as pd import string #创建Series的两种方式 #方式一 t = pd.Series([1,2,3,4,43],index=list ...
- Ubuntu 开机自动挂载硬盘
1.查看Linux硬盘信息: $ sudo fdisk -l 2.格式化硬盘(根据需要确定文件系统): sudo mkfs.xfs /dev/sdb 3.创建/data目录 sudo mkdir /d ...
- 第九节:从源码的角度分析MVC中的一些特性及其用法
一. 前世今生 乍眼一看,该标题写的有点煽情,最近也是在不断反思,怎么能把博客写好,让人能读下去,通俗易懂,深入浅出. 接下来几个章节都是围绕框架本身提供特性展开,有MVC程序集提供的,也有其它程序集 ...
- 【搞事情】VS2015下的openGL初始化
环境:glfw+glew+visual studio 2015 原材料下载链接: glfw 下载 glew 下载 glm库 下载 cmake 下载 (我下载的时候有些官网戳不开(大概校园网问题)... ...
- 基于STM32F1的语音合成芯片SYN6288驱动
目录 说明 SYN6288.h SYN6288.c 说明 基于USART2制作,封装了各种通信协议 SYN6288.h #ifndef _SYN6288_H_ #define _SYN6288_H_ ...
- Leetcode#13. Roman to Integer(罗马数字转整数)
题目描述 罗马数字包含以下七种字符:I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即 ...
- day 17 - 2 递归函数练习
1.斐波那契 问第n个斐波那契数是多少 #这个效率是低的,最好不要使用双递归 def fib(n): if n == 1 or n == 2: return 1 return fib(n-1) + ...
- Subsequence(序列自动机模板题)
题目链接:https://nanti.jisuanke.com/t/38232 题目大意:给你一个字符串,然后再给你m个字符串,然后问你在第一个字符串中不连续的子串能不能构成输入的子串. 具体思路:构 ...
- 软件测试之adb命令-实际公司使用场景--今日log
软件测试之adb命令-实际公司使用场景--今日log Dotest-董浩整理 1)可以看内存泄漏: 2)可以安装.卸载app--截图并提交bug: 3)可以通过抓app日志定位问题: 4)可以结合mo ...
- LeetCode第十四题-字符串数组中最长的共同前缀
Longest Common Prefix 问题简介: 编写一个函数来查找字符串数组中最长的公共前缀字符串,如果没有公共前缀,则返回空字符串"" 举例: 1: 输入: [“xwq” ...