2011
Feb
28
使用 Index與Unique 來提升Sql 語法效能的原理
假設有個資料表 book
id | book_name | price |
Index
當 你將 price設為 Index時,資料庫會自動將price的資料做排序,産生一個新的資料表,當你將book_name時,資料庫會自動以book_name的字母來排 序,産生一個新的資料表,新資料表會應用在,當你在搜尋某個book_name 或是搜尋某個price時,因為資料已經排序過,所以可以大大的減低搜尋時間,但是所産生的新資料表,會增加db的使用量,資料量太大時,反而增加系統的 負擔。
若是 book_name 與 price皆設為Index,並對這兩個欄位執行比對搜尋時,Mysql只會使用其中一個欄位的Index資料表。
如: select * from book where book_name='abc' and price between 500 and 800
Unique
如果資料表中的某一欄位,資料是不可重複時,欄位必須 Unique,原因是除了保證資料欄位不會有重複性的資料外,在搜尋該欄位也會提升效率,若沒有使用Unique,Mysql就必須搜尋完所有的資料,才能判定符合的資料筆數。
測試在 3萬筆資料時,無使用Unique時,搜尋的時間為 0.0085 ,使用Unique後,搜尋的時間為 0.0003,效能大大的提升了,資料量越大,效果就越明顯。