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脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++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迴圈方法耗時相對較長。

5月13日消息,vivoX100s今晚正式發布,除了出色的影像,新機在訊號方面表現也十分強悍。根據vivo官方介紹,vivoX100s採用了創新的寰宇訊號放大系統,該系統配備了高達21根天線。這項設計基於直屏進行了重新優化,以平衡5G、4G、Wi-Fi、GPS以及NFC等眾多訊號需求。這使得vivoX100s成為了vivo有史以來訊號接收能力最強的手機。新款手機還採用了獨特的360°環繞設計,天線分佈在機身周圍。這項設計不僅增強了訊號的強度,還針對日常各種握持姿勢進行了優化,避免了因握持方式不當導

時間複雜度衡量演算法執行時間與輸入規模的關係。降低C++程式時間複雜度的技巧包括:選擇合適的容器(如vector、list)以最佳化資料儲存和管理。利用高效演算法(如快速排序)以減少計算時間。消除多重運算以減少重複計算。利用條件分支以避免不必要的計算。透過使用更快的演算法(如二分搜尋)來優化線性搜尋。

7月29日消息,榮耀X60i手機今日正式開售,先發1,399元。設計上,榮耀X60i手機採用居中挖孔直屏設計,四邊近乎無界的超窄邊框,大大拓寬了視野邊界。榮耀X60i參數顯示器:6.7吋高清顯示器電池:5000mAh大容量電池處理器:天璣6080處理器(台積電6nm,2x2.4G的A76+6×2G的A55)系統:MagicOS8.0系統其他功能: 5G訊號增強靈動膠囊螢幕下指紋雙MIC降噪知識問答攝影能力:後置雙攝系統:5000萬像素主攝200萬像素輔助鏡頭前置自拍鏡頭:800萬像素價格:8GB

7月19日消息,小米MIXFold4首旗艦折疊新機今晚正式發布,首次搭載「立體異形電池」。據介紹,小米MIXFold4在電池技術上實現了重大突破,專為折疊螢幕設計了創新的「立體異形電池」。傳統折疊式螢幕設備多採用常規方形電池,空間利用效率較低。為解決此問題,小米沒有採用常見的捲繞式電芯,而是全新開發疊片製程,打造全新形態的電池,大幅提升了空間利用率。電池技術創新為了實現精確交替堆疊正負極片,確保鋰離子安全嵌入,小米開發了新型超音波焊接機和疊片機,提高了焊接和裁切精

優化C++多執行緒效能的有效技術包括:限制執行緒數量,避免爭用資源。使用輕量級互斥鎖,減少爭用。優化鎖的範圍,最小化等待時間。採用無鎖定資料結構,提高並發性。避免忙等,透過事件通知執行緒資源可用性。
