国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

揭秘SQL Server查詢優化方法

2024-08-31 00:46:58
字體:
來源:轉載
供稿:網友
查詢速度慢的原因很多,常見如下幾種 

        1、沒有索引或者沒有用到索引(這是查詢慢最常見的問題,是程序設計的缺陷) 
       
2、I/O吞吐量小,形成了瓶頸效應。 
       
3、沒有創建計算列導致查詢不優化。 
       
4、內存不足 
       
5、網絡速度慢 
       
6、查詢出的數據量過大(可以采用多次查詢,其他的方法降低數據量) 
       
7、鎖或者死鎖(這也是查詢慢最常見的問題,是程序設計的缺陷) 
       
8、sp_lock,sp_who,活動的用戶查看,原因是讀寫競爭資源。 
       
9、返回了不必要的行和列 
       
10、查詢語句不好,沒有優化 

        可以通過如下方法來優化查詢 

       
1、把數據、日志、索引放到不同的I/O設備上,增加讀取速度,以前可以將Tempdb應放在RAID0上,SQL2000不在支持。數據量(尺寸)越大,提高I/O越重要. 
       
2、縱向、橫向分割表,減少表的尺寸(sp_spaceuse) 
       
3、升級硬件 
       
4、根據查詢條件,建立索引,優化索引、優化訪問方式,限制結果集的數據量。注意填充因子要適當(最好是使用默認值0)。索引應該盡量小,使用字節數小的列建索引好(參照索引的創建),不要對有限的幾個值的字段建單一索引如性別字段 
       
5、提高網速; 
       
6、擴大服務器的內存,Windows   2000和SQL   server   2000能支持4-8G的內存。配置虛擬內存:虛擬內存大小應基于計算機上并發運行的服務進行配置。運行   Microsoft   SQL   Server?   2000   時,可考慮將虛擬內存大小設置為計算機中安裝的物理內存的   1.5   倍。如果另外安裝了全文檢索功能,并打算運行   Microsoft   搜索服務以便執行全文索引和查詢,可考慮:將虛擬內存大小配置為至少是計算機中安裝的物理內存的   3   倍。將   SQL   Server   max   server   memory   服務器配置選項配置為物理內存的   1.5   倍(虛擬內存大小設置的一半)。 
       
7、增加服務器CPU個數;但是必須明白并行處理串行處理更需要資源例如內存。使用并行還是串行程是MsSQL自動評估選擇的。單個任務分解成多個任務,就可以在處理器上運行。例如耽擱查詢的排序、連接、掃描和GROUP   BY字句同時執行,SQL   SERVER根據系統的負載情況決定最優的并行等級,復雜的需要消耗大量的CPU的查詢最適合并行處理。但是更新操作UPDATE,INSERT, DELETE還不能并行處理。 
       
8、如果是使用like進行查詢的話,簡單的使用index是不行的,但是全文索引,耗空間。   like   'a%'   使用索引   like   '%a'   不使用索引用   like   '%a%'   查詢時,查詢耗時和字段值總長度成正比,所以不能用CHAR類型,而是VARCHAR。對于字段的值很長的建全文索引。 
       
9、DB   Server   和APPLication   Server   分離;OLTP和OLAP分離 
       
10、分布式分區視圖可用于實現數據庫服務器聯合體。聯合體是一組分開管理的服務器,但它們相互協作分擔系統的處理負荷。這種通過分區數據形成數據庫服務器聯合體的機制能夠擴大一組服務器,以支持大型的多層   Web   站點的處理需要。有關更多信息,參見設計聯合數據庫服務器。(參照SQL幫助文件'分區視圖') 

          a、在實現分區視圖之前,必須先水平分區表 
        b、在創建成員表后,在每個成員服務器上定義一個分布式分區視圖,并且每個視圖具有相同的名稱。這樣,引用分布式分區視圖名的查詢可以在任何一個成員服務器上運行。系統操作如同每個成員服務器上都有一個原始表的復本一樣,但其實每個服務器上只有一個成員表和一個分布式分區視圖。數據的位置對應用程序是透明的。 

     
11、重建索引   DBCC   REINDEX   ,DBCC   INDEXDEFRAG,收縮數據和日志   DBCC   SHRINKDB,DBCC   SHRINKFILE.   設置自動收縮日志.對于大的數據庫不要設置數據庫自動增長,它會降低服務器的性能。   在T-sql的寫法上有很大的講究,下面列出常見的要點:首先,DBMS處理查詢計劃的過程是這樣的: 

       
1、   查詢語句的詞法、語法檢查         
       
2、   將語句提交給DBMS的查詢優化器 
       
3、   優化器做代數優化和存取路徑的優化 
       
4、   由預編譯模塊生成查詢規劃 
       
5、   然后在合適的時間提交給系統處理執行 
       
6、   最后將執行結果返回給用戶其次,看一下SQL   SERVER的數據存放的結構:一個頁面的大小為8K(8060)字節,8個頁面為一個盤區,按照B樹存放。 

       
12、Commit和rollback的區別   Rollback:回滾所有的事物。   Commit:提交當前的事物.   沒有必要在動態SQL里寫事物,如果要寫請寫在外面如:   begin   tran   exec(@s)   commit   trans   或者將動態SQL   寫成函數或者存儲過程。 

       
13、在查詢Select語句中用Where字句限制返回的行數,避免表掃描,如果返回不必要的數據,浪費了服務器的I/O資源,加重了網絡的負擔降低性能。如果表很大,在表掃描的期間將表鎖住,禁止其他的聯接訪問表,后果嚴重。 

       
14、SQL的注釋申明對執行沒有任何影響 

       
15、盡可能不使用光標,它占用大量的資源。如果需要row-by-row地執行,盡量采用非光標技術,如:在客戶端循環,用臨時表,Table變量,用子查詢,用Case語句等等。游標可以按照它所支持的提取選項進行分類:   只進   必須按照從第一行到最后一行的順序提取行。FETCH   NEXT   是唯一允許的提取操作,也是默認方式。可滾動性   可以在游標中任何地方隨機提取任意行。游標的技術在SQL2000下變得功能很強大,他的目的是支持循環。 

        有四個并發選項 

READ_ONLY:不允許通過游標定位更新(
Update),且在組成結果集的行中沒有鎖。 

        OPTIMISTIC  
WITH   valueS:樂觀并發控制是事務控制理論的一個標準部分。樂觀并發控制用于這樣的情形,即在打開游標及更新行的間隔中,只有很小的機會讓第二個用戶更新某一行。當某個游標以此選項打開時,沒有鎖控制其中的行,這將有助于最大化其處理能力。如果用戶試圖修改某一行,則此行的當前值會與最后一次提取此行時獲取的值進行比較。如果任何值發生改變,則服務器就會知道其他人已更新了此行,并會返回一個錯誤。如果值是一樣的,服務器就執行修改。   選擇這個并發選項 主站蜘蛛池模板: 延边| 康马县| 丰镇市| 武汉市| 清镇市| 瑞安市| 壶关县| 新民市| 镇原县| 通江县| 金昌市| 宁陕县| 洪雅县| 绍兴县| 武山县| 广安市| 儋州市| 琼结县| 鄂温| 府谷县| 右玉县| 德钦县| 临桂县| 大足县| 成武县| 清苑县| 元朗区| 宁南县| 景德镇市| 湛江市| 永登县| 乐平市| 积石山| 镇赉县| 马鞍山市| 铅山县| 兰州市| 健康| 鹤壁市| 金山区| 武定县|