SqlServer应用系统性能优化设计
本文转载自:http://wenku.baidu.com/view/4b1f67d97f1922791688e801.html 在用SQLServer进行 系统 设计 时,正确、合理地 设计 数据库、索引、查询、选择合适的数据类型、 优化 SQL语句等可以达到提高 系统 性能 的目的。本文讨论 应用 系统 性能 优化 的方
本文转载自:http://wenku.baidu.com/view/4b1f67d97f1922791688e801.html
在用SQLServer进行系统设计时,正确、合理地设计数据库、索引、查询、选择合适的数据类型、优化SQL语句等可以达到提高系统性能的目的。本文讨论应用系统性能优化的方法,并且给出一些有益的建议。
数据库应用系统设计应包含两方面的内容:一是结构设计,也就是设计数据库框架或数据库结构;二是行为设计,即设计应用程序、事务处理等。
1 数据库设计
要在良好的SQL Server 方案中实现最优的性能,最关键的是要有一个很好的数据库设计方案。在实际工作中,许多SQL Server 方案往往是由于数据库设计得不好导致性能很差。合理的数据库设计是提高总体性能的最有效途径。
在设计数据库时应考虑的问题
① 应用程序的性能需求。设计数据库时必须利用SQL Server 中能够提高性能的功能。对于性能而言,在数据库大小和硬件配置之间权衡是很重要的。
② 要综合考虑用窄表还是用长数据表。用多的、有相互关系的窄表来代替很多列的长数据表,可以使排序和建立索引更为迅速。由于表窄,每个表中可以有少一些的索引,因此可以提高Insert 、Update 、Delete 等的速度,因为这些操作在索引多的清况下会对系统性能产生很大的影响。但表多会增加在获取数据时引用表的数目和其间的连接关系的复杂性,太多的表和复杂的连接关系会降低服务器的性能,因此在这两者之间需要综合考虑。
③ 正确合理地选择数据类型。在SQL Server 中数据是必不可少的,对每一属性选择什么样的数据类型很大程度上依据表的要求,但是在不违背表要求的前提下,选择适当的数据类型可以提高系统性能。与每个表列相关的数据类型应该反映数据所需的最小存储空间,对只含数值信息的字段尽量使用数字型,不要设计为字符型,这可提高查询和连接的性能。这是因为引擎在处理查询和连接时对于数字型只需要比较一次,而对字符型会逐个比较字符串中每一个字符。能使用smallint类型就不要用integer 类型,这样索引字段可以被更快地读取,而且可以在1个数据页上放置更多的数据行,因而也就减少了I/O操作。如果一个列内所有值的长度相差较大应尽可能的使用varchar / nvarchar 代替char / nchar ,因为变长字段存储空间小,可以节省存储空间,另外对于查询来说,在一个相对较小的字段内搜索效率显然要高些。如果一个列内所有值的长度都相同或者值的长度相差不大,使用固定长度列更高效。
2 应用程序设计
数据库应用系统设计优化一个重要的方面就是应用程序的优化。应用程序设计在决定使用SQL Server 的系统的性能方面起关键作用。下面给出一些基本的开发技巧和相关技术。
① 消除过多的网络流量。客户端和SQL Server 之间的网络往返通常是影响数据库应用程序性能的首要原因,甚至超过了服务器和客户端之间传送的数据量这一因素的影响。在设计应用程序时应筛选数据,尽可能地减少从远程数据源获取不必要的数据,将网络流量减到最小。
② 使用存储过程。使用存储过程可以极大地提高运行效率,可以独立于应用程序而对存储过程进行修改,可以设置用户通过存储过程对某些数据进行访问,并进行有限制的操作,从而保证表中数据的安全性。③ 使用SET Nocount 会话设置。如果存储过程中有多个语句,则默认清况下,SQL Server 在每个语句完成时给客户端应用程序发送一条消息,详细说明每个语句所影响的行数。如果确信应用程序不需要时,可使用SET Nocount 会话设置为应用程序禁用这些消息,由于该设置大量减少了网终流量,因此可显著提高性能。
④ 使用适中的结果集。检索没必要大的结果集并在客户端浏览将增加CPU和网络I/O的负载,使应用程序的远程使用能力降低并限制多用户可伸缩性。最好将应用程序设计为提示用户输入足够的信息,以便查询提交后生成大小适中的结果集。
⑤ 用批处理方式发送语句。为了提高程序的执行效率,在T-Sql语言编写的程序中,可以使用Go 语句将多条Sql 语句进行分隔,两个Go 之间的Sql 语句作为一个批处理。从应用程序一次性地发送到Sql server 服务器进行执行,加快了程序的传递和执行速度。
⑥ 系统的可扩充性。在设计时必须充分考虑到系统的可扩充性,使设计易于变动。一个设计优良的数据库系统应该具有一定的可伸缩性,应用环境的改变和新需求的出现一般不会推翻原设计,不会对现有的应用程序和数据造成大的影响,而只是在原设计基础上做一些扩充即可满足新的要求。
3 索引查询设计
设计索引和查询对于在SqlServer上取得良好的性能是十分重要的。
31 索引设计与优化
有效地设计索引可以提高性能。常用的索引主要分为聚集索引和非聚集索引。聚集索引保证数据库表中记录的物理顺序与索引顺序相同,检索效率比普通索引要高,但对数据增加、修改、删除的影响较大,因此聚集索引适合于固定表。非聚集索引不会影响数据表中记录的实际存储顺序、比聚集索引需要较少的存储空间,检索效率比聚集索引低,但对数据增加、修改删除的影响很小,适合于数据经常变更的表。在设计过程中,要根据查询设计准则,以查询的优化特点为基础设计素引,在设计索引时应考虑:① 使用窄的索引。比较窄的索引具有比较高的效率,对于比较窄的索引,在每页上将会有更多的索引行和更少的索引级别(相对于多索引和复合索引而言), 所以,缓存中能放置更多的索引页,这样也减少了I/O操作。
② 不要对经常被更新的列建立索引,否则会严重影响性能。
③ 不要对记录数目很少的表建立索引。对小型表进行索引可能不会产生优化效果。
④ 只对经常用来检索的字段建立索引。索引并不是越多越好,因为索引本身要占用一定的存储空间,而且当增加或更新数据时,数据库需要执行额外的操作来维护索引,这些操作在索引多的清况下会对系统性能产生很大的影响。在设计和创建索引时,应确保对性能的提高程度大于在存储空间和处理资源方面的代价。
⑤ 不能用null 作索引。如果某列存在空值,即使对该列建索引也不会提高性能。
32 查询设计与优化
数据查询是数据库的核心操作。对查询进行优化,应尽量避免全表扫描。对于应用程序,重点在于Sql语句的执行效率。SQLServer提供了Select 语句进行数据库的查询。具体的优化方法:
① 建立索引时应考虑在Where 及Order By或Group By 涉及的列上。
② 只指定需要的字段。除非需要表中的所有字段,否则不要使用Select * From 这样的语句。③ Where 子句限制下载的记录数。在执行一个查询时,除非完全需要,否则应该避免在一个表中无限制地读并处理所有的行。Where 子句设定的范围和条件越精确,向计算机传输的记录就越少,查询完成得也越快。
④ 应尽量避免在Where 子句中对字段进行Null 值判断。当字段中有Null 值时,可以在该字段上设置默认值。,确保表中该列没Null 值。如:Select ID From Table Where Num Is Null
可以在Num 字段上设置默认值。,然后这样查询:Select ID From Table Where Num =0
⑤ 应尽量避免在Where 子句中使用NOT 、!= 或<>操作符。因为这样的子句是排斥性的,而不是包括性的,所以在扫描整个表之前无法确定子句的选择性。
⑥ 应尽量避免色Where 子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描,除非建立了基于函数的索引。
如:Select ID From Table Where Substring(Name,1,3)='xx'
应改为:Select ID From Table Where Name Like 'xx%'
⑦ 对于连续的数值,能用Between就不要用In 。
如:Select ID From Table Where Num In(1,2,3)
可改为:Select ID From Table Where Num Between 1 And 3
⑧ 合理安排多个选择条件的排列顺序。选择条件的排列顺序对性能的影响较大,要提高查询的响应速度,就要将较严格的条件写在前面,较弱的写在后面。
4 结束语
在设计开发SqlServer数据库应用系统中,合理有效地利用上述方法固然能提高性能,但系统性能优化是一个复杂的过程,影响数据库系统性能的因素是很多的,而应用又各不相同,找出一个通用的优化方案是不现实的,在系统开发的过程中应根据实际清况选择合理的数据库系统设计和优化策略,这样才能充分利用数据库管理系统提供的高性能服务使应用系统充分发挥其高效的功能。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

7月12日消息,荣耀MagicV3系列今日正式发布,搭载全新荣耀视力舒缓绿洲护眼屏,在屏幕本身具备高规格和高素质的同时,还开创性的引入AI主动式护眼技术。据悉,传统的缓解近视的方式是“近视镜”,近视眼镜度数均匀分布,保证了视线中心区域成像在视网膜之上,但周边区域成像在视网膜后,视网膜感应到成像在后,促进眼轴向后生长,从而使度数加深。目前主要的缓解近视发展的方式之一是“离焦镜”,其中心区域度数正常,周边区域通过光学设计分区调整,从而使周边区域成像落在视网膜前,

不同Java框架的性能对比:RESTAPI请求处理:Vert.x最佳,请求速率达SpringBoot2倍,Dropwizard3倍。数据库查询:SpringBoot的HibernateORM优于Vert.x及Dropwizard的ORM。缓存操作:Vert.x的Hazelcast客户机优于SpringBoot及Dropwizard的缓存机制。合适框架:根据应用需求选择,Vert.x适用于高性能Web服务,SpringBoot适用于数据密集型应用,Dropwizard适用于微服务架构。

PHP数组键值翻转方法性能对比表明:array_flip()函数在大型数组(超过100万个元素)下比for循环性能更优,耗时更短。手动翻转键值的for循环方法耗时相对较长。

7月29日消息,荣耀X60i手机今日正式开售,首发1399元。设计上,荣耀X60i手机采用居中挖孔直屏设计,四边近乎无界的超窄边框,极大地拓宽了视野边界。荣耀X60i参数显示屏:6.7英寸高清显示屏电池:5000mAh大容量电池处理器:天玑6080处理器(台积电6nm,2x2.4G的A76+6×2G的A55)系统:MagicOS8.0系统其他功能:5G信号增强灵动胶囊屏下指纹双MIC降噪知识问答摄影能力:后置双摄系统:5000万像素主摄200万像素辅助镜头前置自拍镜头:800万像素价格:8GB

5月13日消息,vivoX100s今晚正式发布,除了出色的影像,新机在信号方面表现也十分强悍。据vivo官方介绍,vivoX100s采用了创新的寰宇信号放大系统,该系统配备了高达21根天线。这一设计基于直屏进行了重新优化,以平衡5G、4G、Wi-Fi、GPS以及NFC等众多信号需求。这使得vivoX100s成为了vivo有史以来信号接收能力最强的手机。新款手机还采用了独特的360°环绕设计,天线分布在机身周围。这一设计不仅增强了信号的强度,还针对日常各种握持姿势进行了优化,避免了因握持方式不当导

时间复杂度衡量算法执行时间与输入规模的关系。降低C++程序时间复杂度的技巧包括:选择合适的容器(如vector、list)以优化数据存储和管理。利用高效算法(如快速排序)以减少计算时间。消除多重运算以减少重复计算。利用条件分支以避免不必要的计算。通过使用更快的算法(如二分搜索)来优化线性搜索。

7月19日消息,小米MIXFold4首旗舰折叠新机今晚正式发布,首次搭载“立体异形电池”。据介绍,小米MIXFold4在电池技术上实现了重大突破,专为折叠屏设计了创新的“立体异形电池”。传统折叠屏设备多采用常规方形电池,空间利用效率较低。为解决这一问题,小米没有采用常见的卷绕式电芯,而是全新开发叠片工艺,打造全新形态的电池,大幅提升了空间利用率。电池技术创新为了实现精确交替堆叠正负极片,确保锂离子安全嵌入,小米开发了新型超声焊接机和叠片机,提高了焊接和裁切精

优化C++多线程性能的有效技术包括:限制线程数量,避免争用资源。使用轻量级互斥锁,减少争用。优化锁的范围,最小化等待时间。采用无锁数据结构,提高并发性。避免忙等,通过事件通知线程资源可用性。
