Index和SQL指令的執行效能有很大的關係, 很多討論資料庫系統Performance Tuning的書中, 都會把Index的建立原則加以詳細說明...
昨天我們談到兩種Index: Primary Key和Unique Index, 這是最常見的兩種Index, Primary Key有Unique和Sort的機制, 通常也不允許NULL值的存在, 所以一個位被設置為Primary Key時, 通常就有三個限制條件在內: 惟一值、不為NULL、由小到大排序, 所以Primary Key也可視為限制條件(Constraint).
我們也可以這樣建立Index:
mysql> CREATE INDEX RN ON account(RealName);
這樣會以RealName欄位建立一個Index, 沒有惟一性質, 可重覆值.
mysql> CREATE INDEX RN24 ON account(RealName(16));
以RealName的前16個字元建立Index.
一般來說, MySQL是以BTREE演算法則來建立Index, BTREE的好處是便宜..就是說不須要耗費大量的計算程序..只要簡單的比較程序就可以找到資料, 由統計瞭解, 一個好的Index設計, 應該要能在三個BTREE Page中找到資料, 這樣的Index設計才算是效率好的Index.
另外一個設計Index的原則是要能夠把WHERE條件中有納入比較條件的欄位都放在Index中, 這樣的Index比較能夠提升SQL指令的運作效率.
第三個原則是, Index要小, 小到能提供足夠的索引需要鍵值以提升WHERE條件的過濾速度, 又要能減少磁碟IO的次數...
所以, 一個好的DBA會經常檢查各個Index的使用情況, 怎麼檢查呢? 就是去看一個參數值Hit Rate, 這個參數值高, 代表Index的效率很好, 這個參數值低, 代表Index能用來找到資料的效率低.
關於Index, 我們就先談到這裏, 之後會在必要時再回來討論Index..明天我們討論View...