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

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


咨詢(xún)
建站咨詢(xún)
