提高查詢的效率,相當於在字典中建立的字母表或者偏旁部首表,這樣查詢當然比一行一行查詢要快的多
每個儲存引擎可以建立索引的長度是不一樣的,但每個表至少支援16個索引,總的索引長度至少為256個位元組。大多數儲存引擎有更高的限制。
create index index_name [using index
——type] on table_name(index_col_name)
其中:index_col_name: col_name[(length)] [asc | desc]
刪除:drop index index_name on tabel_name
mysiam和innodb儲存引擎預設的都是btee索引。
而memory儲存引擎支援hash索引,hash索引的問題是:只能使用=或者
<=>操作符比較,用於order by不能使用索引。
其中handler_read_key代表乙個行被索引值讀的次數,很低的值表明增加索引得到的效能改善不高,因為索引並不經常使用。handler_read_rnd_next代表在資料檔案中讀下一行的請求次數,如果大量的掃瞄表的話,此值將很高,此時應該建立索引,或者當前的索引建立不合理,需要重新建立索引。
| variable_name | value |
| handler_read_first | 1 |
| handler_read_key | 141 |
| handler_read_next | 12 |
| handler_read_prev | 0 |
| handler_read_rnd | 24 |
| handler_read_rnd_next | 495 |
搜尋的索引列,不一定是所要選擇的列,即最合適索引的列是出現在where子句中的列,或者連線子句中指定的列,而不是出現在select關鍵字後的選擇列表中的列。
使用唯一的索引。索引列的基數越大,就是不同的列越多,索引的效果就越好。
使用短索引、字首索引。對於大的字串來說,只要指定前面的一些字元來建立索引即可,因為索引也是需要磁碟空間的。
使用最左索引,就是建立索引時寫在第乙個位置的列。
不要過度使用索引:索引的建立生成都要佔據額外的磁碟空間,並降低寫操作的效能。在修改表的使用,索引也必須更新。只要保持所需的索引有利於查詢優化
注意點:
當建立復合索引的時候,一般查詢條件中使用到最左的索引列,索引會被使用
當查詢條件中使用like關鍵字時,%不能放在開頭,否則不會使用索引。
當查詢條件中使用or關鍵字時,應該每個查詢條件都有獨立的索引
mysql 中索引的問題
1 mysql使用索引口訣 demo示例 全值匹配我最愛,最左字首要遵守 帶頭大哥不能死,中間兄弟不能斷 索引列上少計算,範圍之後全失效 like百分寫最後,覆蓋索引不寫星 join連線型別同,order條件非表示式 不等空值or和 0 1 索引失效要少用。2 可以使用mysql的explain來檢...
Mysql 中建立索引和索引的使用問題
在資料庫中合理的使用索引是提公升mysql資料庫的一種高效和快捷的方式,但是在索引的使用上在我的使用中發現有很多坑,因為自己之前沒有認識到,所以來總結一下 索引是一種特殊的檔案,其中包含著對資料表中的所有記錄的引用指標 欄位中儲存的內容重複性不能過高,比如性別,顏色等這些可區分性很低的字段 欄位會經...
MySQL索引,MySQL中索引的限制?
mysql中索引的限制 1 myisam儲存引擎引鍵的長度綜合不能超過1000位元組 2 blob和text型別的列只能建立字首索引 3 mysql目前不支援函式索引 4 使用!或者 的時候mysql不能使用索引 5 過濾字段使用了函式運算的時候如 abs key sum key 的時候mysql無...