概要:
數據庫對象索引其實與書的目錄非常相似,主要是為了提高從表中檢索數據的速度。
由于數據存儲在數據庫表中,所以索引是創建在數據庫表對象上的,由表中的一個字段或多個字段生成的鍵組成,這些鍵存儲在數據結構(B-樹或哈希表)中。通過MYSQL可以快速有效地查找與鍵值相關聯的字段。
索引是在存儲引擎中實現的,因此每種存儲引擎的索引都不一定完全相同,并且每種存儲引擎也不一定支持所有索引類型。
根據存儲引擎定義每個表的最大索引數和最大索引長度。所有存儲引擎支持每個表至少16個索引,總索引長度至少為256字節。
大多數存儲引擎有更高的限制。MYSQL中索引的存儲類型有兩種:BTREE和HASH,具體和表的存儲引擎相關;
MYISAM和InnoDB存儲引擎只支持BTREE索引;MEMORY和HEAP存儲引擎可以支持HASH和BTREE索引
索引的優點:
1、通過創建唯一索引,保證數據庫表每行數據的唯一性
2、大大加快數據查詢速度
3、在使用分組和排序進行數據查詢時,可以顯著減少查詢中分組和排序的時間
索引的缺點:
1、維護索引需要耗費數據庫資源
2、索引需要占用磁盤空間,索引文件可能比數據文件更快達到最大文件尺寸
3、當對表的數據進行增刪改的時候,因為要維護索引,速度會受到影響
一般下面情況適合創建索引:
1、經常被查詢的字段,即在WHERE子句中出現的字段
2、在分組的字段,即在GROUP BY子句中出現的字段
3、存在依賴關系的子表和父表之間的聯合查詢,即主鍵或外鍵字段
4、設置唯一完整性約束的字段
一般下面情況不適合創建索引:
1、在查詢中很少被使用的字段
2、擁有許多重復值的字段
索引的分類
1、普通索引和唯一索引
主鍵索引是一種特殊的唯一索引,不允許有空值
2、單列索引和復合索引
單列索引只包含單個列
復合索引指多個字段上創建的索引,只有在查詢條件中使用了創建索引時的第一個字段,索引才會被使用。使用復合索引時遵循最左前綴集合
3、全文索引
全文索引類型為FULLTEXT,在定義索引的列上支持值的全文查找,允許在這些索引列中插入重復值和空值。全文索引可以在
CHAR、VARCHAR、TEXT類型列上創建。MYSQL只有MYISAM存儲引擎支持全文索引
4、空間索引
空間索引是對空間數據類型的字段建立的索引,MYSQL中的空間數據類型有4種,
分別是GEOMETRY、POINT、LINESTRING、POLYGON。
MYSQL使用SPATIAL關鍵字進行擴展,使得能夠用于創建正規索引類型的語法創建空間索引。創建空間索引的列,必須
將其聲明為NOT NULL,空間索引只能在存儲引擎為MYISAM的表中創建