日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL高级-索引是什么

發布時間:2025/3/19 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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高级-索引是什么的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。