博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
性能优化
阅读量:6688 次
发布时间:2019-06-25

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

约束处理

在插入数据时,每个约束(如:外键、默认值、SQL CHECK等)需要额外的时间来检测数据是否符合约束;由于SQL Server为了保证每个插入、更新或删除的记录都符合约束条件,所以,我们需要考虑是否应该在数据量大的表中增加约束条件。

Varchar

VARCHAR是数据库常用的类型,但它也可能导致意想不到的性能开销;每次我们存储可变长度的列,那么SQL Server必须做更多的内存管理;字符串可以很容易地消耗数百字节的内存的,如果我们在一个VARCHAR列中设置索引,那么SQL Server执行B-树搜索时,就需要进行O(字符串长度)次比较,然而,整数字段比较次数只受限于内存延迟和CPU频率。

使用存储过程

前面例子中,我们把SQL代码直接Hardcode在客户端代码中,那么,数据库就需要使用解析器解析客户端中SQL语句,所以我们可以改用使用存储过程,从而,减少解析器的时间开销;更重要的一点是,由于SQL是动态执行的,所以我们修改存储过程中的SQL语句也无需重新编译和发布程序。

使用数据库事务

想想数据是否可以延长写入到数据库中,是否可以批量地写入呢?如果允许延迟一段时间才写入到数据库中,那么我们可以使用Transaction来延迟数据写入。

数据库事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 SQL Server确保事务执行成功后,数据写入到数据库中,反之,事务将回滚。

如果我们对数据库进行十次独立的操作,那么SQL Server就需要分配十次锁开销,但如果把这些操作都封装在一个事务中,那么SQL Server只需要分配一次锁开销。

使用SqlBulkCopy

通过使用事务封装了写入操作,当我们重新运行代码,发现数据写入的速度大大提高了,由于一个事务只需分配一次锁资源,减少了分配锁和数据库联接的耗时。

当然,我们可以也使用SqlBulkCopy实现大量数据的写入操作,首先我们创建数据行,然后使用SqlBulkCopy的WriteToServer()方法将数据行批量写入到表中

转载于:https://www.cnblogs.com/leejunxu/archive/2013/01/22/2871422.html

你可能感兴趣的文章
sizeof与strlen的区别与联系
查看>>
Citrix发布支持Framehawk技术的HDX协议,用户体验优势进一步扩大
查看>>
Android各种访问权限Permission详解
查看>>
RHEL5.5安装中文支持
查看>>
web前端开发中浏览器兼容问题(五)
查看>>
小博老师解析Java核心技术 ——动态解析Jar的运用
查看>>
我的友情链接
查看>>
博为峰Java技术文章 ——JavaSE Swing BoxLayout布局管理器I
查看>>
PC时代的20位英雄
查看>>
经典的MySQL 数据备份daemon程序
查看>>
腾讯云TDSQL审计原理揭秘
查看>>
postgresql的源码安装及配置使用
查看>>
Nginx反向代理腾讯云COS的一个坑
查看>>
简单sql server数据库自动还原脚本
查看>>
我的友情链接
查看>>
【MySQL数据库开发之四】MySQL 处理模式/常用查询/模式匹配等(下)
查看>>
http 长连接和短连接介绍
查看>>
E-STP
查看>>
(JMX读书笔记)-JMX基本概念
查看>>
grep的语法和用法
查看>>