什么是索引?
mysql官方對索引的定義為:索引(Index)是幫助MySQL高效獲取數據的數據結構。我們可以簡單理解為:快速查找排好序的一種數據結構。Mysql索引主要有兩種結構:B+Tree索引和Hash索引。我們平常所說的索引,如果沒有特別指明,一般都是指B樹結構組織的索引(B+Tree索引)。
索引的類型
索引類型有多種,哈希、BTREE、全文索引等,其實不管什么類型,都是為了在特定業務場景下方便快速查找數據的算法。
例如哈希索引,key-value形式,最簡單的,書本的目錄也是類似的。
假如有一本書中,我們已知文章標題要找到這篇文章來閱讀,如果沒有目錄,我們就要翻整本書去找標題,
但是如果標題單獨抽出來作為key,頁碼作為value就可以快速找到內容。
顯然書本開頭的目錄是要占用幾頁紙的,建立索引也是要消耗資源的。
BTREE索引是另一種算法,不同業務場景使用對應索引會更有效率。
就好比新華字典的目錄跟普通的書本目錄不同,新華字典可以通過拼音或者偏旁部首的查詢方法去快速查到字在第幾頁,這也是一種“索引”
還有全文索引等,這里不在描述,例如solr、elasticsearch使用的算法可以去研究一下
索引概念
索引本質:索引就是數據庫表中字段值的復制,該字段稱為索引的關鍵字
索引也是一張表,該表保存了主鍵與索引字段,并指向實體表的記錄
索引往往通過復雜的數據結構(雙向鏈表、B+樹/B樹、hash)實現
MyISAM存儲引擎的表支持主索引,InnoDB存儲引擎的表支持聚簇索引(主索引)與非聚簇索引(輔助索引)索引優化使用
索引的優缺點
@優點:
MySQL的索引的建立對于MySQL的高效運行非常重要,可以大大提高MySQL的檢索速度。
在分組和排序字句進行數據檢索,可以減少查詢時間中 分組 和 排序時所消耗的時間(數據庫的記錄會重新排序)
在表連接的連接條件 可以加速表與表直接的相連
@缺點:
但過多使用索引會造成索引濫用,提高了檢索速度,缺降低了表的更新速度
如:對表進行增刪改查操作時,MySQL不僅要保存數據,還要保存索引文件,建立索引會占用磁盤空間的索引文件
在創建索引和維護索引 會耗費時間,隨著數據量的增加而增加