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 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









7月12日のニュースによると、Honor Magic V3シリーズは本日正式にリリースされ、新しいHonor Vision Soothing Oasisアイプロテクションスクリーンを搭載しており、スクリーン自体は高スペックで高品質であると同時に、AIアクティブアイプロテクションの導入も先駆けとなっています。テクノロジー。近視を軽減する伝統的な方法は「近視メガネ」であると報告されています。近視メガネの度数は均等に分散され、視野の中心領域は網膜上に結像されますが、周辺領域は網膜の後ろに結像されます。網膜は像が遅れていると認識し、眼軸方向の成長を促進し、その度数が深くなります。現在、近視の進行を軽減する主な方法の 1 つは、「デフォーカス レンズ」です。中央領域は通常の度数で、周辺領域は光学設計の隔壁によって調整され、周辺領域の像が収まります。網膜の前。

さまざまな Java フレームワークのパフォーマンス比較: REST API リクエスト処理: Vert.x が最高で、リクエスト レートは SpringBoot の 2 倍、Dropwizard の 3 倍です。データベース クエリ: SpringBoot の HibernateORM は Vert.x や Dropwizard の ORM よりも優れています。キャッシュ操作: Vert.x の Hazelcast クライアントは、SpringBoot や Dropwizard のキャッシュ メカニズムよりも優れています。適切なフレームワーク: アプリケーションの要件に応じて選択します。Vert.x は高パフォーマンスの Web サービスに適しており、SpringBoot はデータ集約型のアプリケーションに適しており、Dropwizard はマイクロサービス アーキテクチャに適しています。

PHP の配列キー値の反転メソッドのパフォーマンスを比較すると、array_flip() 関数は、大規模な配列 (100 万要素以上) では for ループよりもパフォーマンスが良く、所要時間が短いことがわかります。キー値を手動で反転する for ループ方式は、比較的長い時間がかかります。

7月29日のニュースによると、Honor X60i携帯電話は本日正式に発売され、価格は1,399元からとなっている。デザインの面では、Honor X60i 携帯電話は、中央に穴があり、四辺すべてにほぼ境界のない超狭い境界線を備えたストレート スクリーン デザインを採用しており、視野が大幅に広がります。 Honor X60i パラメータ ディスプレイ: 6.7 インチ高解像度ディスプレイ バッテリー: 5000mAh 大容量バッテリー プロセッサー: Dimensity 6080 プロセッサー (TSMC 6nm、2x2.4G A76+6x2G A55) システム: MagicOS8.0 システム その他の機能: 5G 信号強化、スマートカプセル、画面下指紋認証、デュアルMIC、ノイズリダクション、知識Q&A、撮影機能:背面デュアルカメラシステム:5000万画素メインカメラ、200万画素補助レンズ、フロントセルフィーレンズ:800万画素、価格:8GB

5 月 13 日のニュースによると、vivoX100s は今夜正式にリリースされました。優れた画像に加えて、新しい携帯電話は信号の面でも非常に優れています。 vivo の公式紹介によると、vivoX100s は最大 21 個のアンテナを備えた革新的なユニバーサル信号増幅システムを使用しています。この設計は、5G、4G、Wi-Fi、GPS、NFC などの多くの信号要件のバランスをとるために、ダイレクト スクリーンに基づいて再最適化されています。これにより、vivoX100s は vivo 史上最強の受信能力を備えた携帯電話となります。新しい電話機は、本体の周囲にアンテナを配置した独自の 360 度サラウンド設計も採用しています。この設計は信号強度を高めるだけでなく、日常のさまざまな保持姿勢を最適化し、不適切な保持方法によって引き起こされる問題を回避します。

時間計算量は、入力のサイズに対するアルゴリズムの実行時間を測定します。 C++ プログラムの時間の複雑さを軽減するためのヒントには、適切なコンテナー (ベクター、リストなど) を選択して、データのストレージと管理を最適化することが含まれます。クイックソートなどの効率的なアルゴリズムを利用して計算時間を短縮します。複数の操作を排除して二重カウントを削減します。条件分岐を使用して、不必要な計算を回避します。二分探索などのより高速なアルゴリズムを使用して線形探索を最適化します。

7月19日のニュースによると、初の主力折りたたみ新型携帯電話であるXiaomi MIX Fold 4が今夜正式にリリースされ、初めて「三次元特殊形状バッテリー」を搭載したとのこと。レポートによると、Xiaomi MIX Fold4はバッテリー技術で大きな進歩を遂げ、折りたたみ式スクリーン専用に革新的な「三次元特殊形状バッテリー」を設計しました。従来の屏風型端末は、スペース利用効率が低い従来の角形電池を使用することがほとんどでした。この問題を解決するために、Xiaomi は一般的な巻回バッテリーセルを使用せず、新しいラミネートプロセスを開発して新しい形式のバッテリーを作成し、スペース利用率を大幅に改善しました。バッテリー技術の革新 正極シートと負極シートを正確に交互に積み重ね、リチウムイオンの安全な埋め込みを確保するために、Xiaomi は新しい超音波溶接機とラミネート機を開発し、溶接と切断の精度を向上させました。

C++ マルチスレッドのパフォーマンスを最適化するための効果的な手法には、リソースの競合を避けるためにスレッドの数を制限することが含まれます。競合を軽減するには、軽量のミューテックス ロックを使用します。ロックの範囲を最適化し、待ち時間を最小限に抑えます。ロックフリーのデータ構造を使用して同時実行性を向上させます。ビジー待機を回避し、イベントを通じてリソースの可用性をスレッドに通知します。
