新聞中心
此文章主要向大家講述的是SQL Server查詢優(yōu)化的實(shí)際操作建議,在實(shí)際操作中有些查詢本身就對(duì)資源的消耗很大。這與基本的數(shù)據(jù)庫(kù)與索引的相關(guān)問題有關(guān)。這些查詢的效率并不低,因?yàn)镾QL Server查詢優(yōu)化器會(huì)以最有效的可能方式實(shí)現(xiàn)這些查詢。

創(chuàng)新互聯(lián)技術(shù)團(tuán)隊(duì)10多年來致力于為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、品牌網(wǎng)站制作、全網(wǎng)營(yíng)銷推廣、搜索引擎SEO優(yōu)化等服務(wù)。經(jīng)過多年發(fā)展,公司擁有經(jīng)驗(yàn)豐富的技術(shù)團(tuán)隊(duì),先后服務(wù)、推廣了1000多家網(wǎng)站,包括各類中小企業(yè)、企事單位、高校等機(jī)構(gòu)單位。
然而,它們確實(shí)消耗大量資源,而且 Transact-SQL 面向集合的性質(zhì)使這些查詢看起來效率很低。SQL Server查詢優(yōu)化器的智能水平無法消除這些構(gòu)造的固有資源成本。與不復(fù)雜的查詢相比,這些查詢的固有成本十分昂貴。雖然 Microsoft? SQL Server? 2000 使用***的訪問計(jì)劃,但受到基礎(chǔ)構(gòu)造可能性的限制。例如,下列類型的查詢可能占用大量資源:
返回大結(jié)果集的查詢
高度不唯一的 WHERE 子句
不過有一些針對(duì)優(yōu)化查詢和提高查詢性能的建議,其中包括:
添加更多的內(nèi)存(尤其是如果服務(wù)器運(yùn)行許多復(fù)雜查詢而且其中幾個(gè)查詢執(zhí)行很慢)。
在有多個(gè)處理器的計(jì)算機(jī)上運(yùn)行 SQL Server。多個(gè)處理器使 SQL Server 得以利用并行查詢。
考慮重新編寫查詢
如果查詢使用游標(biāo),則確定如果使用效率更高的游標(biāo)類型(如快速只進(jìn)游標(biāo))或單純查詢能否更有效地編寫游標(biāo)查詢。單純查詢的性能一般優(yōu)于游標(biāo)操作。一組游標(biāo)語(yǔ)句通常是一個(gè)外循環(huán)操作,在此操作中,一旦使用內(nèi)部語(yǔ)句便開始處理外循環(huán)內(nèi)的每行,因此可考慮使用 GROUP BY 或 CASE 語(yǔ)句或改為使用子查詢。
如果應(yīng)用程序使用循環(huán),可考慮在查詢內(nèi)放入循環(huán)。應(yīng)用程序常包含帶參數(shù)化查詢的循環(huán),該循環(huán)執(zhí)行許多次并要求運(yùn)行應(yīng)用程序的計(jì)算機(jī)與 SQL Server 之間有網(wǎng)絡(luò)往返??筛臑槭褂门R時(shí)表創(chuàng)建一個(gè)更復(fù)雜的查詢。只需提供一個(gè)網(wǎng)絡(luò)往返,SQL Server查詢優(yōu)化器即會(huì)更好地優(yōu)化這個(gè)查詢。
不要對(duì)同一查詢內(nèi)的單個(gè)表使用多個(gè)別名以模擬索引交叉。模擬索引交叉已沒有必要,因?yàn)?SQL Server 會(huì)自動(dòng)考慮索引交叉并且可以在同一查詢內(nèi)的相同表上使用多個(gè)索引。例如,給出下列示例查詢:
- SELECT * FROM lineitem WHERE partkey BETWEEN 17000
- AND 17100 AND shipdate BETWEEN '1/1/1994' AND '1/31/1994"
SQL Server 可以在 partkey 和 shipdate 列上都使用索引,然后在兩個(gè)子集之間執(zhí)行哈希匹配以獲得索引交叉。
只在必要時(shí)才使用查詢提示。若查詢使用在 SQL Server 早期版本上執(zhí)行的提示,則應(yīng)在不指定提示的情況下對(duì)該查詢進(jìn)行測(cè)試。提示會(huì)防礙SQL Server查詢優(yōu)化器選擇更好的執(zhí)行計(jì)劃。
利用 query governor 配置選項(xiàng)和設(shè)置??梢允褂?query governor 配置選項(xiàng)阻止執(zhí)行長(zhǎng)時(shí)間運(yùn)行的查詢,從而防止消耗系統(tǒng)資源。默認(rèn)情況下,query governor 配置選項(xiàng)允許執(zhí)行所有查詢,而不考慮查詢所需的時(shí)間。
然而,可以將查詢調(diào)控器設(shè)置到***秒數(shù),以允許執(zhí)行所有連接的所有查詢或只允許執(zhí)行特定連接的查詢。查詢調(diào)控器基于估計(jì)的查詢成本而不是實(shí)際的已用時(shí)間,因此沒有任何運(yùn)行時(shí)開銷。它還在長(zhǎng)時(shí)間運(yùn)行的查詢開始前便將其停止,而不是先運(yùn)行這些查詢直到達(dá)到某些預(yù)定義的限制為止。
【編輯推薦】
- SQL Server 2000 數(shù)據(jù)庫(kù)的版本有哪些?
- SQL Server 瀏覽器的正確應(yīng)用
- SQL Server刪除群集的實(shí)例演示
- SQL Server主鍵列的正確查看方式
- SQL Server數(shù)據(jù)庫(kù)與XML支持的正確解析經(jīng)典版
網(wǎng)站標(biāo)題:SQLServer查詢優(yōu)化的實(shí)際操作建議描述
當(dāng)前URL:http://www.dlmjj.cn/article/cdpides.html


咨詢
建站咨詢
