如何設計好的INDEX
一、方法
1.使用SET STATISTICS IO去測量
(1)在兩個相同的TABLE,建立INDEX後,比較logical reads和physical reads
logical reads:從BUFFER CACHE讀取資料,指SQL Server為得到查詢中的結果而必須從BUFFER CACHE讀取的頁數,所以logical reads越小越好。
physical reads:從硬碟讀取資料,指SQL Server為得到查詢中的結果而必須從硬碟讀取的頁數,所以physical reads越小越好,因為減少從硬碟讀取的次數,可減少IO。
這也就是為何Buffer hit ratio越大越好,因為Buffer hit ratio的公式為(logical reads – physical reads)/logical read * 100%
也就是說當logical reads比例越大,資料大部分都從記憶體(CACHE)來,而非硬碟(IO)。
2.使用SET STATISTICS TIME去測量
SQL Server Execution Times:
CPU time = 30 ms, elapsed time = 387 ms.
CPU time:這次查詢使用了多少CPU時間。
elapsed time:這次查詢花了多少時間。
PS:elapsed time會因為系統的運行的情況而導致變化過大,除非環境很穩定,所以實際測量沒甚麼幫助。而CPU time則是一個估計值,估計
這次查詢會花CPU多少時間,CPU time越小越好。
3.使用圖形化的執行計畫去測量。
二、測試計劃。
(1)複製TABLE兩個的TABLEA和TABLEB,TABLEA的INDEX為SSYM ORGN IDEN YEAR SRNO IDNO NAME PQTY,另一個TAVLEB為ORGN YEAR IDEN SRNO IDNO NAME SSYM PQTY
使用方法1 2 3去測。
(A)SELECT一個月一個機關的資料
(B)DELETE一個月一個機關的資料
(C)INSERT一個月一個機關的資料
(2)SSYM或ORGN的DATA TYPE如為INT。
(A)SELECT一個月一個機關的資料
(B)DELETE一個月一個機關的資料
(C)INSERT一個月一個機關的資料
三、假設:
1.應為TABLEA的INDEX為SSYM ORGN IDEN YEAR SRNO IDNO NAME PQTY效能較佳。
2.SSYM或ORGN的DATA TYPE如為INT時效能較佳。
結論:
假設是否成立:
此外除了INDEX的設計外,SQL語法的TUINING和實體檔案(MDF、NDF)等等也可以使用這些方法來做,也就是這些方法的就是用來衡量調校前和調校後的判斷準則。
沒有留言:
張貼留言