当前位置: 首页 > 编程日记 > 正文

SQL Server 最佳实践分析器使用小结

Best Practices Analyzer Tool for Microsoft SQL Server 2000Microsoft SQL Server开发团队开发的一个数据库管理工具,可以让你检测设计的数据库是否遵循SQL Server操作和管理的最佳实践准则。这些准则公认有助于提高数据库的性能和效率,并让应用程序易于维护。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

1,安装SQL BPA后,启动界面如下所示:

SQLBPA.jpg

2,开始使用SQL BPA最佳实践分析器

安装完成后会有一个SQL Server Best Practices Analyzer User GuideWord文档,如何使用讲解的很清楚,基本步骤如下:

1)登录SQL BPA

2)添加分析/检测的SQL Server实例

这里需要输入SQL Server实例名称,Friendly Name用来和后面创建Best Practice Group相关联(和SQL Server实例名称保持一样就可以了)。Database List的缺省值为*,表示包含当前SQL Server实例的所有数据库。但是,BPA会跳过对‘master, tempdb, msdb, pubs, and northwind’等数据库的检测。

3)管理Best Practice Groups(最佳实践组)

首先需要创建一个Best Practice Group,其实是组合了一些Rules,并和前面输入的SQL Server实例进行关联。

4)分析SQL Server实例

将前面创建Best Practice Group移到Best Practice Groups to be Executed列表中,就可以按照前面定义的Rules来执行,并产生Report提供改进的建议和准则。

 

3,SQL BPA v1.0包括的Rules

我觉得这个是重点,因为只有明白了这些SQL Server操作和管理的最佳实践准则,才能在设计数据库和编写T-SQL脚本时,尽量按照这些Rules来操作,提高SQL Server和应用程序的性能和效率。

其实所有的Rules都在这里(English Versionfile:///C:/Program%20Files/Microsoft%20SQL%20Server%20Best%20Practices%20Analyzer/html/RuleInformation.html#_Rule:_Explicit_Index_Creation,请注意我是采用默认路径安装的SQL BPA,如果你改变的安装路径,就不在这里了。

 

下面将一些自己比较感兴趣的Rules整理了一下:

1)数据库设计

Rule: Tables without Primary Keys or Unique Constraints

检测数据库确保所有的table都有定义一个Primary Key或一列有Unique Constraint的定义。

 

Rule: User Object Naming(用户对象的命名)

检测以sp_, xp_, or fn_为前缀命名的用户对象,避免和SQL Server的内置对象发生命名冲突。如果SQL Server发现存储过程以sp_作为前缀,就会先到master数据库中查询这个存储过程,影响性能呵。

因此,要符合下列准则:

不要使用sp_前缀来命名用户定义的存储过程;

不要使用xp_前缀来命名用户定义的扩展存储过程;

不要使用fn_前缀来命名用户定义的函数。

其实,可以通过使用usp_, uxp_, or ufn_等前缀来命名就可以了,u表示user defined

 

2T-SQL

Rule: Cursor FOR UPDATE column list

检测stored procedures, functions, views and triggersFOR UPDATE子句。当一个cursor定义了FOR UPDATE子句,则推荐提供明确的column列。FOR UPDATE用来定义cursor内可更新的列。如果提供了 OF column_name,则只允许修改列出的列。如果在没有指定列的列表,除非指定了READ_ONLY并发选项,否则所有列均可更新。SQL Server可以基于指定的列优化操作。

 

Rule: Cursor Usage

检测stored procedures, functions, views and triggers中是否正确定义cursor可更新性。在如下情况下,会报告失败:

当一个cursor没有定义FOR UPDATE子句,但通过cursor来更新;

当一个cursor定义了FOR UPDATE子句,却没有通过cursor来更新。

 

不过,一般我们尽量避免使用服务器端cursor,因为比较占用服务器内存资源,影响SQL Server的性能。可以使用嵌套查询或者WHILE语句,来代替cursor。即使使用cursor,也应注意定义cursor的一些选项,如FAST_FORWARD

 

Rule: Explicit Index Creation

推荐使用CLUSTERED or NONCLUSTERED显式创建index

 

Rule: INSERT Column List

要求在使用INSERT时,明确提供column列表,提高代码的可维护性。

 

Rule: Nested Triggers Configuration

检测由于nested triggers的配置问题,未触发的triggers。这个比较少有,直接贴过来了。

When 'nested triggers' configuration option is set to 0, any AFTER trigger defined on tables/views updated inside an INSTEAD OF trigger is not fired. This rule:

1) Checks the value of the configuration option and exits if it is not 0.

2) Scans all INSTEAD OF triggers and generates a list of tables/view being target of DML from within a trigger.

3) Checks whether any of the identified DML targets have AFTER triggers defined on them.

4) Reports non-compliance for any such case.

 

Rule: NOCOUNT Option in Triggers

检测triggers,确保在triggers前面写有SET NOCOUNT ON

SQL Server在每一条语句执行完成后,都会发送’done’信息。这些信息会导致触发trigger的应用程序可能产生一些意外的后果。因此,在trigger前面加上SET NOCOUNT ON是一个良好的设计习惯。

 

当然,在stored procedures, functions中都推荐在前面添加SET NOCOUNT ON。这样一系列SQL命令执行影响的行数不会传回客户端,减少网络流量,提高性能。

 

Rule: NULL Comparisons

检测stored procedures, functions, views and triggers中涉及NULL常量的等于或不等于比较。推荐设置ANSI_NULLSON,并且使用IS关键字来呵NULL常量进行比较。

 

Rule: Results in Triggers

检测triggers,确保triggers没有数据返回给调用者。因此,不推荐在triggers中使用如下语句:

PRINT statement

SELECT (without assignment or INTO clause)

FETCH (without assignment)

 

Rule: Scoping of Transactions

检测stored procedures and triggers中的transaction范围,推荐transaction的开始和结束在同一T-SQL结构内。

 

一般而言,尽量缩小transaction的范围,避免占用大量的资源,影响SQL Server性能。

 

Rule: SELECT *

检测stored procedures, functions, views and triggersSELECT *的使用。尽管SELECT * 比较方便,但是会降低程序的可维护性。对table or view的改变,可能会引起错误或性能的改变。

因此,推荐在SELECT语句后面显式指定字段列表。

 

Rule: SET Options

检测stored procedures and triggers中如下SET语句的使用。

推荐如下选项设置为ON:

  • ANSI_NULLS

  • ANSI_PADDING

  • ANSI_WARNINGS

  • ARITHABORT

  • CONCAT_NULL_YIELDS_NULL

  • QUOTED_IDENTIFIER

推荐如下选项设置为OFF:

  • NUMERIC_ROUNDABOUT

Rule: Temp Table Usage

检测stored procedures and triggers中临时表的使用。当创建临时表时,需要创建CREATE INDEX,并且在使用完成后,需要释放该临时表。

因为临时表会产生大量的磁盘IO操作,因此推荐采用TABLE变量替换临时表的使用。

不过,由于并发执行的限制和统计信息的维护,当有大量的数据插入临时表时,仍推荐采用临时表。

 

Rule: TOP without ORDER BY

检测stored procedures, functions, views and triggers中缺少ORDER BYTOP语句。在使用TOP语句时,推荐指定排序条件。否则,产生的结果将于SQL执行计划相关而导致异常的行为。

 

Rule: Use of Schema Qualified Tables/Views

检测stored procedures, functions, views and triggers中引用tables and views时,拥护者owner是否指定。虽然在SQL Server中引用特定的对象时,可以不指定server, database and owner(schema),也就是说不用server_name.database_name.owner_name.***这么麻烦,但是SQL Server推荐当在stored procedure, function, view or trigger中引用table or view时,最好指定table or view的拥有者。

 

SQL Server查询未指定ownertable/view对象时,首先查询缺省的owner,然后才是dbo。这样,会导致SQL Server产品额外的运行成本。通过指定owner,可以改进SQL Server的性能。(第一次听到这种说法)

 

4,参考文档及相关资源

工具下载URL:

http://www.microsoft.com/downloads/details.aspx?FamilyId=B352EB1F-D3CA-44EE-893E-9E07339C1F22&displaylang=en

视频下载URL:

http://www.microsoft.com/china/msdn/events/webcasts/shared/msdntv/episode.aspx?xml=/china/msdn/events/webcasts/msdntv/20040610sqlserverck/manifest.xml

转载于:https://www.cnblogs.com/rickie/archive/2004/09/24/46113.html

相关文章:

Vue 框架-02-事件:点击, 双击事件,鼠标移上事件

Vue 框架-02-事件&#xff1a;点击, 双击事件,鼠标移上事件 1.单击事件&#xff1a;v-on:click 源码 app2.js &#xff1a; //实例化 vue 对象 new Vue({//注意代码格式//el&#xff1a;element 需要获取的元素&#xff0c;一定是 html 中的根容器元素el:"#vue-app",…

HTML5 canvas绘制雪花飘落

Canvas是HTML5新增的组件&#xff0c;它就像一块幕布&#xff0c;可以用JavaScript在上面绘制各种图表、动画等。没有Canvas的年代&#xff0c;绘图只能借助Flash插件实现&#xff0c;页面不得不用JavaScript和Flash进行交互。有了Canvas&#xff0c;我们就再也不需要Flash了&a…

CSS之布局(默认样式)

默认样式&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>默认样式</title><!--重置样式表&#xff1a;专门用来对浏览器的样式进行重置的reset.css 直接去除浏览器的默认样式normalize.css 对默认样…

Junit资料汇集

Junit资料汇集 提交时间: 2004-2-24 17:23:10 回复 发消息 JUnit入門http://www.dotspace.twmail.org/Test/JUnit_Primer.htm怎样使用Junit Framework进行单元测试的编写http://www.chinaunix.net/bbsjh/14/546.htmlAntJunitLog4JCVS进行XP模式开发的建立http://ejb.cn/modu…

LESS 的 operation 是 特性

LESS 的 operation 是 特性&#xff0c;其实简单的讲&#xff0c;就是对数值型的 value&#xff08;数字、颜色、变量等&#xff09;进行加减乘除四则运算。 例&#xff1a; 清单 1 . LESS 文件 12345init: #111111; transition: init*2; .switchColor { color: transition; }经…

测一测你的blog魔症有多严重

测一测你的blog魔症有多严重 在Donews.net那里看到了这个有趣的测试&#xff1a;Are You a Blogaholic? 用来测试你对Blog的迷恋程度。 下面是我的得分与评价&#xff1a;14058 people have taken this silly test so far. 3626 people have scored higher than you. 9297 pe…

CSS之布局(盒子的尺寸)

盒子的尺寸&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>盒子的尺寸</title><style>.box1{width: 100px;height: 100px;background-color: #BBFFAA;padding: 10px;border: 10px solid red;/*默…

自己写的一个测试函数执行效率的单元(test on Delphi 7)

运用了一点技巧来实现对函数进行效率测试使用方法:uses Profile;.......function TForm1.Func1():string;begin TFunctionTimeProfiler.ExecuteTest(ClassName, Func1); //这里会创建一个接口实例,并开始测试; 此实例会自动释放并结束测试 ....end;程序最后退出会自动生…

datatable自动增加序号

{"targets": [0],"visible": true,"render": function (data, type, full, meta) {var id full.id;if (id) {return meta.row 1 meta.settings._iDisplayStart;} else {return ;}} },此方法有点小bug,推荐用下面的方法。 var table $(#myTabl…

CSS之布局(轮廓和圆角)

轮廓和圆角&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>轮廓和圆角</title><style>.box1{width: 200px;height: 200px;background-color: #BBFFAA;/*box-shadow用来设置元素的的阴影效果&…

Idea项目遇到的错误整理

解决方案 1.Maven 加入新的子模块module, 重新编译报错&#xff1a;找不到类/符号/程序包 需要清空Idea缓存&#xff0c;重新编译 File -> Invalidate Cahes... 转载于:https://www.cnblogs.com/atongmumu/p/7027050.html

对不起,我爱你

在学校上传了一部“对不起&#xff0c;我爱你”&#xff0c;据说很多人都喜欢看&#xff0c;对我 而言没有时间去看了&#xff0c;不过原声大碟倒是常常放到我的“Beep-media-player”里边&#xff0c;大四了&#xff0c;也常常觉得时间的珍贵&#xff0c;许多事情仿佛也懂了许…

流水账,从我开始接触计算机时写起

我第一次接触计算机是在读初二的时候&#xff0c;每周有一节微机课&#xff0c;记得那时大家都挺喜欢上这门课的&#xff0c;一到上课时间就往机房冲&#xff0c;生怕自己去晚了占不了机子&#xff0c;我也是懵懵懂懂的在老师的指导下&#xff0c;在一台黑白屏的电脑上学会了打…

装饰模式(Decorator)

1、概念 装饰模式动态地给一个对象添加一些额外的职责。就扩展功能而言&#xff0c;它比生成子类方式更为灵活&#xff0c;属于结构性模式一种。 2、模式结构 抽象组件角色(Component)&#xff1a;定义一个对象接口&#xff0c;以规范准备接受附加责任的对象&#xff0c;即可以…

css 背景样式学习

背景样式主要有5个属性&#xff1a; 1. background-color 背景颜色 2.background-img 背景图像 3.background-repeat 背景图像如何重复(no-repeat repeat repeat-x repeat-y inherit) 4.background-position 定位背景图像位置(top right bottom left center) 5.background-at…

CSS之定位(定位/相对定位)

定位/相对定位&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>定位/相对定位</title><style>body{font-size: 60px;}.box1{width: 200px;height: 200px;background-color: #bfa;}.box2{width:…

GARFIELD@01-24-2005

the kickoff of not being bored 转载于:https://www.cnblogs.com/rexhost/archive/2005/01/24/96477.html

(To Me Just)c#中的WebBrowser类的使用注意事项!

Visual C# 打造 “浏览器” try { if(tabControl.SelectedIndex 0) { axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_SAVEAS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT); } else if(tabControl.SelectedIndex 1) { …

CSS之定位(绝对定位)

绝对定位&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>绝对定位</title><style>body{font-size: 60px;position: relative;}.box1{width: 200px;height: 200px;background-color: #bfa;}.bo…

python pexpect包的一些用法

转自&#xff1a;https://www.jianshu.com/p/cfd163200d12 mark一下&#xff0c;原文中写的挺详细 转载于:https://www.cnblogs.com/renxchen/p/9935888.html

编译工具 之 ant

一、概述需要设置的环境变量&#xff1a;JAVA_HOME"D:\JDK",ANT_HOME"D:\ant",PATH".,%JAVA_HOME%\bin,%ANT_HOME%bin"运行&#xff1a;ant -buildfile test.xml -Dbuildbuild/classes dist&#xff08;含义为&#xff1a;执行test.xml的编译脚本…

微酷WeiKuCMS现赠送高速开发系统软件。公司、程序猿的福音呀!

我国电子商务面临的问题。淘宝退出百度无疑是一个遗憾。当在网上购物时。用户面临的一个非常大的问题就是怎样在众多的站点找到自己想要的物品。并以最低的价格买到。自从淘宝退出百度。建立自己的搜索引擎后。广大消费者再也不能再百度里面直接搜索有关淘宝的商品了&#xff0…

网友为对百合所唱的最后的挽歌!(节选)

dudu&#xff0c;不要删好吗&#xff0c;太郁闷了&#xff0c;太郁闷了&#xff0c;太郁闷了 sigh, 如果真的3.20日是末期的话&#xff0c;我所承诺的开源&#xff0c;只不过是一个玩笑罢了 参见&#xff1a;http://bbs.nju.edu.cn/blogall 网友为对百合所唱的最后的挽歌&#…

人工智能入门(二):语音识别基本模型

spectral analysis和formants&#xff0c;倒频谱&#xff0c;mel谱等feature有关&#xff1b; training和recognition涉及到&#xff1a;基础的&#xff08;DWT&#xff0c;HMM&#xff0c;Viterbi等&#xff09;&#xff1b;高阶的&#xff08;deep learning等&#xff09;。…

也谈文件夹同步

前言 1 同步分为文件级别&#xff0c;和块级别。rsync是块级别。 2 如果是基于微软文件共享或samba协议&#xff0c;用robocopy.exe即可文件级别的同步。 3 通过任务计划&#xff0c;实现自动&#xff0c;定时同步。 4 如果是ftp&#xff0c;sftp&#xff0c;用powershellwinsc…

几则与西门子相关的消息

西门子称手机部门前途未定 力推WiMAX系统 http://www.sina.com.cn 2005年02月15日 12:11 新浪科技 新浪科技讯 美国当地时间2月14日(北京时间2月15日)消息&#xff0c;在日前于法国戛那举行的“3GSM世界大会”上&#xff0c;西门子手机部门将何去何从再次被业界所关注。但西门…

CSS之定位(固定定位)

固定定位&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>固定定位</title><style>body{font-size: 60px;height: 2000px;}.box1{width: 200px;height: 200px;background-color: #bfa;}.box2{w…

在页面中控制媒体流的起播点和播放长度

近来在一个web项目中&#xff0c;客户提出需要在试听的音频文件中&#xff0c;输入开始时间和结束时间&#xff0c;然后从开始时间播放&#xff0c;到结束时间停止。在google中搜索了几次&#xff0c;都找不到相关的文档&#xff0c;只有自己进行研究了。刚开始的时候&#xff…

CSS之定位(粘滞定位)

粘滞定位&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>粘滞定位</title><style>body{height: 3000px;}/*粘滞定位-当元素的position属性值设置为sticky时开启元素的粘滞定位-粘滞定位和相对定…

链表的经常使用操作

链表的经常使用操作 posted on 2017-06-18 10:38 mthoutai 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/mthoutai/p/7043708.html