MySQL中索引的概念
索引(MySQL中也叫做"鍵(key)")是一種數據結構,用于存儲引擎快速定找到記錄。
簡單來說,它類似于書籍的目錄,通過索引可以快速找到對應的數據行,而無需遍歷整個表。索引建立在表的列上,通過對列中的數據進行特定的排序和存儲方式,使得數據庫在執行查詢操作時,能夠迅速定位到滿足條件的數據。例如,在一個包含大量用戶信息的表中,如果沒有索引,當要查詢某個特定用戶時,可能需要逐行檢查每一條記錄;而有了索引,數據庫可以直接根據索引找到對應的用戶記錄,大大提高了查詢效率。索引不僅可以用于加速查詢,還能在數據唯一性約束、排序操作等方面發揮重要作用 。
索引的作用
- 加快數據檢索速度:通過索引可以快速定位到符合條件的數據行,減少全表掃描的次數,從而大大提高查詢效率。
- 在犧牲少量寫入性能的前提下,顯著提升查詢效率
- 唯一索引和主鍵索引能確保表中特定列的數據唯一性,避免重復數據的插入,保證數據的完整性。
索引的優缺點
優點
- 提高查詢速度,減少查詢時間,提升數據庫的響應性能。
- 可以強制數據的唯一性,維護數據的完整性和一致性。
缺點
- 占用存儲空間:索引本身需要占用一定的磁盤空間,特別是在數據量較大的情況下,索引占用的空間也會相應增加。
- 影響寫入性能:在插入、更新和刪除數據時,不僅要更新數據本身,還要更新對應的索引,會增加操作的時間和資源消耗。
MySQL中主流索引類型詳解
索引有很多種不同的類型,可以為不同的場景提供更好的性能。在MySQL中,索引是在存儲引擎層而不是在服務器層實現的。所以并沒有同一的索引標準:不同存儲引擎支持的索引不完全相同,不同的存儲引擎相同索引的底層實現不一樣,工作方式也不同。
核心索引類型對比
索引類型 | 存儲引擎支持 | 數據結構 | 是否唯一 | 支持操作 | 典型應用場景 | 索引示例SQL |
---|---|---|---|---|---|---|
B+Tree索引 | InnoDB/MyISAM | B+Tree | 可選 | =, >, <, >=, <=, BETWEEN, ORDER BY, LIKE ‘prefix%’ | 主鍵索引、普通索引、聯合索引 | CREATE INDEX idx_name ON users(last_name) |
哈希索引 | MEMORY引擎顯式支持 InnoDB自適應哈希隱式使用 | Hash Table | 可選 | 僅精確匹配 (=, <=>) | 內存表(MEMORY引擎)、等值過濾 | CREATE TABLE mem_table (...) ENGINE=MEMORY |
全文索引 | InnoDB(5.6+)/MyISAM | 倒排索引 | 不支持 | MATCH() AGAINST() 支持自然語言/布爾搜索 | 文章內容搜索、商品描述查詢 | ALTER TABLE articles ADD FULLTEXT(title,body) |
空間索引 | InnoDB(5.7+)/MyISAM | R-Tree | 不支持 | GIS關系運算 (ST_Contains, ST_Distance等) | GIS數據查詢、地圖坐標查詢、地理圍欄判斷 | CREATE SPATIAL INDEX sp_idx ON lands(poly) |
主鍵索引 | 所有引擎 | B+Tree | 強制唯一 | 與B+Tree相同 | 表的主標識字段 | CREATE TABLE ... PRIMARY KEY(id) |
關注我!下一篇,我們繼續詳細學習不同類型的索引!