缺省情況下,tempdb數據庫是放置在master設備上,容量為2M,而臨時數據庫是活動最為平凡的數據庫常常被用來排序、創建臨時表、重格式化等操作,所以tempdb的優化應該受到特別的關注。
第一步:將臨時數據庫與高速緩沖進行綁定。
由於臨時表的創建、使用,臨時數據庫會頻繁地使用數據緩存,所以應為臨時數據庫創建高速緩存,從而可以使其常駐內存並有助於分散I/O:
1、創建命名高速緩存
sp_cacheconfig “tempdb_cache”,”10m”,”mixed”
2、重新啟動server
3、捆綁臨時數據庫到tempdb_cache高速緩存
sp_bindcache “tempdb_cache”, tempdb
4、若有大的I/O,配置內存池
第二步:優化臨時表
大多數臨時表的使用是簡單的,很少需要優化。但需要對臨時表進行復雜的訪問則、
應通過使用多個過程或批處理來把表的創建和索引分開。以下兩種技術可以改善臨時表的優化
1、在臨時表上創建索引
1)臨時表必須存在
2)統計頁必須存在(即不能在空表上創建索引)
2、把對臨時表的復雜的使用分散到多個批處理或過程中,以便為優化器提供信息
下面的這個過程需要進行優化:
create proc base_proc
as
select * into #huge_result from auths
select * from article, #huge_result where article.author_code=
#huge_result.author_code and sex=”0”
使用兩個過程可以得到更好的性能
1)
create proc base_proc
as
select *
into #huge_result
from auths
exec select_proc
2)
create proc select_proc
as
select * from article,#huge_result
where article.author_code=#huge_result.author_code and sex=”0”
說明:在同一個存儲過程或批處理中,創建並使用一個表時,查詢優化器無法決定這個表的大小。