索引是什麼
索引就像是一本書的目錄
索引用於快速找出在某個列中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢數據所花費的時間就越多,如果表中查詢的列有一個索引,MySQL能夠快速到達一個位置去搜索數據文件,而不必查看所有數據,那麼將會節省很大一部分時間。
優點與缺點
優點
- 大大加快查詢速度
- 所有字段類型均可以設置索引
缺點
- 創建和維護索引需要時間,數據量越多,耗時越多
- 索引佔用存儲空間,數據表中的數據也會有最大上線設置的,如果我們有大量的索引,索引文件可能會比數據文件更快達到上線值
- 當對錶中的數據進行增加、刪除、修改時,索引也需要動態的維護,降低了數據的維護速度
使用原則和場景
- 索引
不是越多越好
,需要視情況而定 -
頻繁更新
的表應儘量少
的索引 -
頻繁用於查詢
的字段進行構建
索引 -
數據量小
的字段儘量不要
使用索引,查詢所有數據花費的時間比遍歷索引的數據要短,索引將沒有優化效果 - 字段
不同值少
的字段儘量不要
使用索引,如性別字段僅有男女兩個不同值。
索引分類
注意:索引是在存儲引擎中實現的,也就是說不同的存儲引擎,會使用不同的索引
- MyISAM和InnoDB存儲引擎:只支持BTREE索引, 也就是說默認使用BTREE,不能夠更換
- MEMORY/HEAP存儲引擎:支持HASH和BTREE索引