MySQL 官方對索引的定義:索引(Index)是幫助 MySQL高效獲取數據的數據結構。所以 索引的本質就是數據結構。索引的目的在於提升查詢效率,可類比字典、書籍的目錄等這種形式。mysql
可簡單理解爲 排好序的快速查找數據結構。在數據以外,數據庫系統還維護着 知足特定算法查詢的數據結構,這些數據結構以某種方式指向數據。這樣就能夠在這些數據結構上實現高級查找算法,這種數據結構就是索引。算法
通常來講,索引比較大,不可能所有存儲在內存中,所以索引每每以 索引文件 的形式存儲在磁盤上。sql
日常所說的索引,若是沒有特別指明,都是 B 樹索引。其中彙集索引、次要索引、覆蓋索引、前綴索引、惟一索引默認都是用 B 樹。數據庫
能夠經過命令 show index from table_name
查看錶的索引狀況數據結構
索引主要分爲如下三類:併發
以索引的結構劃分爲如下四類:高併發
建立一個普通索引優化
CREATE INDEX index_name ON table_name (column_name(length))複製代碼
也能夠經過修改表結構的方式來添加索引spa
ALTER TABLE table_name ADD INDEX index_name (column_name(length))複製代碼
注:若是是 char、varchar 類型的字段,length 能夠小於字段實際長度;若是是blob、text 類型,必須指定 lengthcode
添加主鍵索引
ALTER TABLE table_name ADD PRIMARY KEY (column_name)複製代碼
添加惟一索引
ALTER TABLE table_name ADD UNIQUE (column_name)複製代碼
添加全文索引
ALTER TABLE table_name ADD FULLTEXT (column_name)複製代碼
添加普通索引
ALTER TABLE table_name ADD INDEX index_name (column_name)複製代碼
添加組合索引
ALTER TABLE table_name ADD INDEX index_name (column_name_1, column_name_2, column_name_3)複製代碼
DROP INDEX index_name ON table_name複製代碼
SHOW INDEX FROM table_name複製代碼