Database Tuning
資料庫Tuning,大致上可分為以下議題:
1. Configuring the System
2. Tuning the Server
3. Tuning SQL
4. Tuning the Client
5. Tuning the Network
目前我針對 SQL SERVER 來探討,也作為此文章的開始,當我們的資料庫應用程式遇到執行效能的瓶頸時,資料庫開發人員或許先想到的就是索引問題,是否應該在資料庫多新增索引,進而來提高查詢的速度,因此就索引為題先來介紹索引類別。
何謂索引?
資料庫索引事實上和書上的索引意義是相同的,有了索引的整理,就可以快速搜尋到想要的資訊內容(透過索引得知頁碼),而不需要從整本書上的第一頁翻到最後一頁,來逐頁查看所需資訊。而資料庫索引是存放資料表中所包含的值,彙整出的列表,此表紀錄了各個值的列所存在的位置,我們可以為資料庫設定單欄(Field)索引,也可以多欄索引。
SQL SERVER 的索引有兩大類型:
叢集索引:此類型索引,資料表各列的次序與索引鍵值的次序是相符的。
該類型索引在一個表格中只能有一個。
(優點)對Update 和 Delete 的執行效能能明顯提升,因為此兩個command,通常需要先執行讀取大量數據。
(缺點)建立叢集索引與變更需要花費較大的時間成本。
非叢集索引:此類型索引具有獨立於資料列的資料結構。非叢集索引包含一個非叢集索引鍵值,此鍵值項都有指向包含該鍵值的資料列的指標。
此兩種索引類型,都可以是唯一的索引值,也就是在資料表中具有唯一性。
索引注意事項:
索引不是建多就代表效能好,通常只有在針對經常需要查詢或過濾的欄位時,才會建立該索引。建立索引相對會造成硬碟空間的負擔,也會造成新增(INSERT)、刪除(DELETE)、更新(Update)的命令的執行速度。所以應該是使用情境的狀況去調整才是最佳措施。