(7)mysql索引的設計和使用
來源:程序員人生 發布時間:2015-04-18 12:07:50 閱讀次數:4272次
概述
??索援用于快速找出在某個列中有1特定值的行。不使用索引,MySQL必須從第1條記錄開始然后讀完全個表直到找出相干的行。表越大,花費的時間越多。如果表中查詢的列有1個索引,MySQL能快速到達1個位置去搜索到數據文件的中間,沒有必要看所有數據。
??在MySQL中所有的類型數據列都可以被索引,對相干列使用索引是提高select操作性能的最好途徑。MyISAM和InnoDB存儲引擎的表默許創建索引都是BTREE索引。MyISAM還支持全文本索引,該索引可以用于創建全文搜索。默許情況下, MEMORY存儲引擎使用HASH索引,但也支持BTREE索引。
設計索引原則
- 最適合索引的列是出現在where子句中的列,或連接子句中的列。
- 使用唯1索引,索引的列的基數越大,索引效果越好,如寄存生日的列具有不同的值,很容易辨別各個行,而記錄性別的列,只含有“m”和“f”,則對此列進行索引沒有多大用途,由于不管搜索哪一個值,都會大約得出1半的行。
- 使用前綴索引,如果對1個字符串列進行索引,應當指定1個前綴長度。
- 如果索引了多列(復合索引),要遵照最左前綴法則。所謂最左前列,指的是查詢從索引的最左前列開始,并且不跳過索引中的列。
- 不要過量的使用索引。每次的更新,刪除,插入都會保護該表的索引;更多的索引意味著也需要更多的空間 ;太小的表,建索引可能會更慢哦 :) (讀個2頁的宣揚手冊,你還先去找目錄?)。
- 對InnoDB存儲引擎的表,記錄默許會依照1定的順序保存,如果有明肯定義的主鍵,則依照主鍵順序保存,InnoDB表的普通索引都會保存主鍵的鍵值,所有主鍵盡量的選擇較短的數據類型。
- 索引列不應當作為表達式的1部份,即也不能在索引列上使用函數。
說明:
創建表(friends)
創建(uid和fuid的復合索引)。
- 對第4條說明:
第2條語句,從索引的第2列開始查找,使用索引失敗,致使MySQL采取ALL訪問策略,即全表查詢.在開發中,應當盡可能避免全表查詢。
- 對第7條說明:
第2和3條語句都有使用表達式,索引派不上用處。
參考
參考1:http://thephper.com/?p=142
參考2:http://my.oschina.net/longniao/blog/110384
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈