MySQL高级-索引是什么
目錄
什么是索引
索引優勢:
索引劣勢:
索引分類:
mysql索引結構:
哪些情況需要創建索引:
哪些情況不要創建索引:
索引操作:
什么是索引
? ? MySQL官方對索引的定義為:索引(index)是幫助MySQL高效獲取數據的數據結構——可以得到索引的本質:索引是一種數據結構。
? ? 一般來說索引本身也很大不可能全部存儲在內存中,因此索引往往以索引文件的形式存儲在磁盤上。
? ? 我們平常說的索引,如果沒有特別指明,都是B樹(多路搜索樹,并不一定是二叉的)結構組織的索引。其中聚集索引,次要索引,覆蓋索引,復合索引,前綴索引,唯一索引默認都是使用B+樹索引,統稱索引。當然,除了B+樹這種類型的索引之外,還有哈希索引(hash?index)等。
索引優勢:
增加查詢、排序速率。
索引劣勢:
? ? 實際上索引也是一張表,該表保存了主鍵與索引字段,并指向實體表的記錄,所以索引列也是要占用空間的。
? ? 雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件每次添加了索引列的字段,都會調整因為更新所帶來的鍵值變化后的索引信息。
? ? 索引只是提高效率的一個因素,如果你的MySQL有大數據量的表,就需要花時間研究建立最優秀的索引,或優化查詢。
索引分類:
單值索引:即一個索引只包含單個列,一個表可以有多個單列索引。
唯一索引:索引列的值必須唯一,但允許有空值。
復合索引:即一個索引包含多個列。
基本語法:在varchar字段上建立索引時,必須要指定索引長度,沒有必要要對全字段建立索引。
mysql索引結構:
BTree索引、Hash索引、full-text全文索引、R-Tree索引。
哪些情況需要創建索引:
?? ?1.主鍵自動建立唯一索引。
?? ?2.頻繁作為查詢條件的字段應該創建索引。
?? ?3.查詢中與其他表關聯的字段,外鍵關系建立索引。
?? ?4.頻繁更新的字段不適合創建索引(因為每次更新不單單是更新了記錄還會更新索引)
?? ?5.where條件里用不到的字段不創建索引。
?? ?6.單鍵/組合索引的選擇問題,who?(在高并發下傾向創建組合索引)
?? ?7.查詢中排序的字段,排序字段若通過索引去訪問將大大提高排序速度。
?? ?8.查詢中統計或者分組字段。
哪些情況不要創建索引:
?? ?1.表記錄太少。
?? ?2.經常增刪改的表。(提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件)
?? ?3.數據重復且分布平均的表字段,因此應該只為最經常查詢和最經常排序的數據列建立索引。注意,如果某個數據列包含許多重復的內容,為它建立索引就沒有太大的實際效果。
? ? 假如一個表有10萬行記錄,有一個字段A只有T和F兩種值,且每個值得分布概率大約為50%,那么對這種表A字段建索引一般不會提高數據庫的查詢速度。
? ? 索引的選擇性是指索引列中不同值的數目與表中記錄數的比。如果一個表中有2000條記錄,表索引列有1980個不同的值,那么這個索引的選擇性就是1980/2000=0/99。一個索引的選擇性越接近于1,這個索引的效率就越高。
索引操作:
查看索引:
SHOW INDEX FROM tb_stu_info2;
SHOW INDEX FROM tb_stu_info2\G
刪除索引:
DROP INDEX 索引名 ON 表名;
ALTER TABLE 表名 DROP INDEX 索引名;
創建索引:
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL]??INDEX | KEY??[索引名] (字段名1 [(長度)] [ASC | DESC]) [USING 索引方法];
CREATE??[UNIQUE | FULLTEXT | SPATIAL]??INDEX??索引名 ON??表名(字段名) [USING 索引方法];
說明:
UNIQUE:可選。表示索引為唯一性索引。
FULLTEXT:可選。表示索引為全文索引。
SPATIAL:可選。表示索引為空間索引。
INDEX和KEY:用于指定字段為索引,兩者選擇其中之一就可以了,作用是一樣的。
索引名:可選。給創建的索引取一個新名稱。
字段名1:指定索引對應的字段的名稱,該字段必須是前面定義好的字段。
長度:可選。指索引的長度,必須是字符串類型才可以使用。
ASC:可選。表示升序排列。
DESC:可選。表示降序排列
總結
以上是生活随笔為你收集整理的MySQL高级-索引是什么的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次生产事故-mysql执行updat
- 下一篇: CGLIB代理到底是个什么东西?这是一篇