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,效能大大的提升了,資料量越大,效果就越明顯。




回應 (Leave a comment)