-
是什麼:索引是幫助mysql高效獲得數據的數據結構。一種排好序的快速查找數據結構
-
索引具體描述:數據本身之外,數據庫還維護着一個滿足特定查找算法的數據結構,這些數據結構以某種方式指向數據,這樣就可以在這些數據結構的基礎上實現高級的查找算法,這種數據結構就是索引
-
結論:一般來說索引本身也很大,不可能全部存儲在內存中,因此索引往往以索引文件的形式存儲在磁盤上。我們通常所說的索引,如果沒有特別指明,都是指B樹(多路搜索樹,並不一定是二叉樹)結構組織的索引。其中聚集索引、次要索引、覆蓋索引符合索引、前綴索引、唯一索引都是使用B+樹,統稱索引。除了B+樹索引,還有hash索引等等
-
創建索引的目的是什麼:提高查詢效率,可以類比字典
-
索引會影響where後面 的查找和order by後面的排序
-
索引優勢
-
提高數據檢索的效率,降低數據庫的IO成本
-
通過索引列對數據進行排列,降低數據排序的成本,降低CPU的損耗
-
-
索引的劣勢
-
實際上索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄,所以索引也是要佔用空間的
-
雖然索引大大提高了查詢效率,同時卻降低了更新表的速度,如對錶進行insert、delete、update,因爲更新表的時候,Mysql不僅要保存數據,還要保存一下索引文件每次更新添加了索引的字段,都會調整因爲更新所帶來的鍵值變化後的索引信息
-
索引只是提高效率的一個因素,如果Mysql中有大數據量的表,就需要花時間研究建立最優秀的索引,或優化查詢
-
-
索引的分類
-
單值索引:一個索引只包含單個列,一個表可以有多個單列索引
-
唯一索引:索引列的值必須唯一,但允許有空值
-
符合索引:一個索引包含多個列
-
基本語法
<!--創建索引-->
1.CREATE [UNIQUE] INDEX indexName ON myTable(cloumnName(length));
2.ALTER myTable ADD [UNIQUE] INDEX[indexName] ON (columnName(length));
<!--刪除索引-->
DROP INDEX [indexName] ON myTable;
<!--查看命令-->
SHOW INDEX FROM table_name\G
<!--通過以下四種方式進行索引的添加-->
ALTER TABLE tbl_name ADD PRIMARY KEY(cloumn_list);該語句添加了一個主鍵,這意味着索引 值必須是唯一的,且不能爲NULL
ALTER TABLE tbl_name ADD UNIQUE index_name(column_list);該語句創建索引的值必須是唯一的(除了NULL之外,NULL可能會出現多次)
ALTER TABLE tbl_name ADD INDEX index_name(column_list);添加普通索引,索引值可出現多次
ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list),該語句指定了索引爲FULLTEXT,用於全文索引
-
-
mysql索引結構
-
BTree索引
-
參考https://blog.csdn.net/li1325169021/article/details/113664569
-
-
Hash索引
-
full-text全文索引
-
R-Treesuoyin
-
哪些情況下需要創建索引
-
主鍵自動建立唯一索引
-
頻繁作爲查詢條件的應該創建索引
-
查詢中與其他表關聯的字段,外鍵關係建立索引
-
where條件中用不到的字段不要創建索引
-
查詢中排序 字段,排序字段若通過索引去訪問將大大的提高排序速度
-
查詢中統計或者分組字段
哪些情況下不要創建索引
-
表記錄太少
-
經常增刪改的表:提高了查詢表的速度,同時卻會降低更新表的速度,因爲在更新表數據的時候,還要更新索引文件
-
數據重複且分佈平均的表字段,因此應該只爲最經常查詢和最經常排序的數據建立索引,因爲如果某個數據列包含很多重複的內容,爲他建立索引就沒有必要