国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

SQL Server 最佳實(shí)踐分析器使用小結(jié)

瀏覽:93日期:2023-10-30 13:14:04

Best Practices Analyzer Tool for Microsoft SQL Server 2000是Microsoft SQL Server開發(fā)團(tuán)隊(duì)開發(fā)的一個(gè)數(shù)據(jù)庫管理工具,可以讓你檢測(cè)設(shè)計(jì)的數(shù)據(jù)庫是否遵循SQL Server操作和管理的最佳實(shí)踐準(zhǔn)則。這些準(zhǔn)則公認(rèn)有助于提高數(shù)據(jù)庫的性能和效率,并讓應(yīng)用程序易于維護(hù)。

2,開始使用SQL BPA最佳實(shí)踐分析器

安裝完成后會(huì)有一個(gè)SQL Server Best Practices Analyzer User Guide的Word文檔,如何使用講解的很清楚,基本步驟如下:

(1)登錄SQL BPA

(2)添加分析/檢測(cè)的SQL Server實(shí)例

這里需要輸入SQL Server實(shí)例名稱,F(xiàn)riendly Name用來和后面創(chuàng)建Best Practice Group相關(guān)聯(lián)(和SQL Server實(shí)例名稱保持一樣就可以了)。Database List的缺省值為*,表示包含當(dāng)前SQL Server實(shí)例的所有數(shù)據(jù)庫。但是,BPA會(huì)跳過對(duì)‘master’, ‘tempdb’, ‘msdb’, ‘pubs’, and ‘northwind’等數(shù)據(jù)庫的檢測(cè)。

(3)管理Best Practice Groups(最佳實(shí)踐組)

首先需要?jiǎng)?chuàng)建一個(gè)Best Practice Group,其實(shí)是組合了一些Rules,并和前面輸入的SQL Server實(shí)例進(jìn)行關(guān)聯(lián)。

(4)分析SQL Server實(shí)例

將前面創(chuàng)建Best Practice Group移到Best Practice Groups to be Executed列表中,就可以按照前面定義的Rules來執(zhí)行,并產(chǎn)生Report提供改進(jìn)的建議和準(zhǔn)則。

3,SQL BPA v1.0包括的Rules

我覺得這個(gè)是重點(diǎn),因?yàn)橹挥忻靼琢诉@些SQL Server操作和管理的最佳實(shí)踐準(zhǔn)則,才能在設(shè)計(jì)數(shù)據(jù)庫和編寫T-SQL腳本時(shí),盡量按照這些Rules來操作,提高SQL Server和應(yīng)用程序的性能和效率。

其實(shí)所有的Rules都在這里(English Version)file:///C:/Program%20Files/Microsoft%20SQL%20Server%20Best%20Practices%20Analyzer/html/RuleInformation.html#_Rule:_Explicit_Index_Creation,請(qǐng)注意我是采用默認(rèn)路徑安裝的SQL BPA,如果你改變的安裝路徑,就不在這里了。

下面將一些自己比較感興趣的Rules整理了一下:

(1)數(shù)據(jù)庫設(shè)計(jì)

Rule: Tables without Primary Keys or Unique Constraints

檢測(cè)數(shù)據(jù)庫確保所有的table都有定義一個(gè)Primary Key或一列有Unique Constraint的定義。

Rule: User Object Naming(用戶對(duì)象的命名)

檢測(cè)以sp_, xp_, or fn_為前綴命名的用戶對(duì)象,避免和SQL Server的內(nèi)置對(duì)象發(fā)生命名沖突。如果SQL Server發(fā)現(xiàn)存儲(chǔ)過程以sp_作為前綴,就會(huì)先到master數(shù)據(jù)庫中查詢這個(gè)存儲(chǔ)過程,影響性能呵。

因此,要符合下列準(zhǔn)則:

不要使用sp_前綴來命名用戶定義的存儲(chǔ)過程;

不要使用xp_前綴來命名用戶定義的擴(kuò)展存儲(chǔ)過程;

不要使用fn_前綴來命名用戶定義的函數(shù)。

其實(shí),可以通過使用usp_, uxp_, or ufn_等前綴來命名就可以了,u表示user defined。

(2)T-SQL

Rule: Cursor FOR UPDATE column list

檢測(cè)stored procedures, functions, views and triggers中FOR UPDATE子句。當(dāng)一個(gè)cursor定義了FOR UPDATE子句,則推薦提供明確的column列。FOR UPDATE用來定義cursor內(nèi)可更新的列。如果提供了 OF column_name,則只允許修改列出的列。如果在沒有指定列的列表,除非指定了READ_ONLY并發(fā)選項(xiàng),否則所有列均可更新。SQL Server可以基于指定的列優(yōu)化操作。

Rule: Cursor Usage

檢測(cè)stored procedures, functions, views and triggers中是否正確定義cursor可更新性。在如下情況下,會(huì)報(bào)告失敗:

當(dāng)一個(gè)cursor沒有定義FOR UPDATE子句,但通過cursor來更新;

當(dāng)一個(gè)cursor定義了FOR UPDATE子句,卻沒有通過cursor來更新。

不過,一般我們盡量避免使用服務(wù)器端cursor,因?yàn)楸容^占用服務(wù)器內(nèi)存資源,影響SQL Server的性能。可以使用嵌套查詢或者WHILE語句,來代替cursor。即使使用cursor,也應(yīng)注意定義cursor的一些選項(xiàng),如FAST_FORWARD。

Rule: Explicit Index Creation

推薦使用CLUSTERED or NONCLUSTERED顯式創(chuàng)建index。

Rule: INSERT Column List

要求在使用INSERT時(shí),明確提供column列表,提高代碼的可維護(hù)性。

Rule: Nested Triggers Configuration

檢測(cè)由于nested triggers的配置問題,未觸發(fā)的triggers。這個(gè)比較少有,直接貼過來了。

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

檢測(cè)triggers,確保在triggers前面寫有SET NOCOUNT ON。

SQL Server在每一條語句執(zhí)行完成后,都會(huì)發(fā)送’done’信息。這些信息會(huì)導(dǎo)致觸發(fā)trigger的應(yīng)用程序可能產(chǎn)生一些意外的后果。因此,在trigger前面加上SET NOCOUNT ON是一個(gè)良好的設(shè)計(jì)習(xí)慣。

當(dāng)然,在stored procedures, functions中都推薦在前面添加SET NOCOUNT ON。這樣一系列SQL命令執(zhí)行影響的行數(shù)不會(huì)傳回客戶端,減少網(wǎng)絡(luò)流量,提高性能。

Rule: NULL Comparisons

檢測(cè)stored procedures, functions, views and triggers中涉及NULL常量的等于或不等于比較。推薦設(shè)置ANSI_NULLS為ON,并且使用IS關(guān)鍵字來呵NULL常量進(jìn)行比較。

Rule: Results in Triggers

檢測(cè)triggers,確保triggers沒有數(shù)據(jù)返回給調(diào)用者。因此,不推薦在triggers中使用如下語句:

PRINT statement

SELECT (without assignment or INTO clause)

FETCH (without assignment)

Rule: Scoping of Transactions

檢測(cè)stored procedures and triggers中的transaction范圍,推薦transaction的開始和結(jié)束在同一T-SQL結(jié)構(gòu)內(nèi)。

一般而言,盡量縮小transaction的范圍,避免占用大量的資源,影響SQL Server性能。

Rule: SELECT *

檢測(cè)stored procedures, functions, views and triggers中SELECT *的使用。盡管SELECT * 比較方便,但是會(huì)降低程序的可維護(hù)性。對(duì)table or view的改變,可能會(huì)引起錯(cuò)誤或性能的改變。

因此,推薦在SELECT語句后面顯式指定字段列表。

Rule: SET Options

檢測(cè)stored procedures and triggers中如下SET語句的使用。

推薦如下選項(xiàng)設(shè)置為ON:

ANSI_NULLS ANSI_PADDING ANSI_WARNINGS ARITHABORT CONCAT_NULL_YIELDS_NULL QUOTED_IDENTIFIER

推薦如下選項(xiàng)設(shè)置為OFF:

NUMERIC_ROUNDABOUT

Rule: Temp Table Usage

檢測(cè)stored procedures and triggers中臨時(shí)表的使用。當(dāng)創(chuàng)建臨時(shí)表時(shí),需要?jiǎng)?chuàng)建CREATE INDEX,并且在使用完成后,需要釋放該臨時(shí)表。

因?yàn)榕R時(shí)表會(huì)產(chǎn)生大量的磁盤IO操作,因此推薦采用TABLE變量替換臨時(shí)表的使用。

不過,由于并發(fā)執(zhí)行的限制和統(tǒng)計(jì)信息的維護(hù),當(dāng)有大量的數(shù)據(jù)插入臨時(shí)表時(shí),仍推薦采用臨時(shí)表。

Rule: TOP without ORDER BY

檢測(cè)stored procedures, functions, views and triggers中缺少ORDER BY的TOP語句。在使用TOP語句時(shí),推薦指定排序條件。否則,產(chǎn)生的結(jié)果將于SQL執(zhí)行計(jì)劃相關(guān)而導(dǎo)致異常的行為。

Rule: Use of Schema Qualified Tables/Views

檢測(cè)stored procedures, functions, views and triggers中引用tables and views時(shí),擁護(hù)者owner是否指定。雖然在SQL Server中引用特定的對(duì)象時(shí),可以不指定server, database and owner(schema),也就是說不用server_name.database_name.owner_name.***這么麻煩,但是SQL Server推薦當(dāng)在stored procedure, function, view or trigger中引用table or view時(shí),最好指定table or view的擁有者。

當(dāng)SQL Server查詢未指定owner的table/view對(duì)象時(shí),首先查詢?nèi)笔〉膐wner,然后才是dbo。這樣,會(huì)導(dǎo)致SQL Server產(chǎn)品額外的運(yùn)行成本。通過指定owner,可以改進(jìn)SQL Server的性能。(第一次聽到這種說法)

4,參考文檔及相關(guān)資源

工具下載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

標(biāo)簽: Sql Server 數(shù)據(jù)庫
主站蜘蛛池模板: 久热精品男人的天堂在线视频 | 日韩视频一区二区三区 | 欧美les视频xxxx在线观看 | 日本免费在线一区 | 国产精品久久久久影院 | 久久久久亚洲国产 | 扒开双腿猛进入爽爽在线观看 | 国产精品精品国产一区二区 | 国产三级做爰高清视频a | 国产精品久久成人影院 | 亚洲三级中文字幕 | 久久综合狠狠综合久久综合88 | 欧美在线一级va免费观看 | 成人满18在线观看网站免费 | 香蕉超级碰碰碰97视频在线观看 | 女bbbbxxxx毛片视频0 | 一区二区三区欧美视频 | 欧美三级色 | 男女免费观看在线爽爽爽视频 | 天天干亚洲 | 国内精品视频九九九九 | 久久精品中文字幕不卡一二区 | 欧美日韩精品一区二区另类 | 国产成人在线视频免费观看 | 波多野结衣福利视频 | 国产在线手机视频 | 动漫一级毛片 | 国产日韩欧美亚洲 | 欧美日韩无 | 日本www视频 | α片毛片| 免费人成年短视频在线观看网站 | 国产在线综合视频 | 久久久久久久久久久久福利 | 日韩一级影片 | 波多野结衣在线免费观看视频 | 国产一区二区久久精品 | 一级毛片在线不卡直接观看 | 日本韩国三级在线观看 | 中日韩美中文字幕 | 男女上下爽无遮挡午夜免费视频 |