本文共 1116 字,大约阅读时间需要 3 分钟。
1. 索引概述
索引是MySQL高效获取数据的重要工具,它通过维护特定查找算法的数据结构,帮助快速定位所需数据。索引可以看作是一种有序的数据结构,类似于书籍的目录,能够显著降低数据检索的时间复杂度。
2. 索引优势与劣势
优势
索引类似于书籍的目录,显著提高数据检索效率,降低数据库IO成本。 索引列可以对数据进行排序,降低数据排序的成本,减少CPU消耗。 劣势
索引本身占用存储空间,类似于一张表,保存主键与索引字段信息。 索引虽然提高了查询效率,但在数据更新(如INSERT、UPDATE、DELETE)时会增加额外负担,因为需要维护索引文件的更新信息。 3. 索引结构
索引在MySQL的存储引擎层实现,具体类型和功能因存储引擎而异。MySQL支持以下四种索引类型:
- BTREE索引:最常见的索引类型,支持大部分查询。
- HASH索引:仅适用于Memory引擎,简单场景下使用。
- R-tree索引:用于空间数据类型,如地理坐标,MyISAM引擎特性。
- Full-text索引:用于全文检索,InnoDB从MySQL5.6版本支持。
4. B+树结构
B+树是B树的变种,主要特点:
n叉B+树最多含有n个关键字,而B树最多含有n-1个。 B+树的叶子节点保存所有关键字信息,按顺序排列。 非叶子节点作为关键字的索引部分。 B+树的查询效率优于B树,尤其适合范围查询。
5. MySQL中的B+树
MySQL优化了传统B+树,增加叶子节点间的顺序指针,提升区间访问性能。这一改进使得范围查询更加高效。
6. 索引分类
单值索引:索引仅包含单一列。 唯一索引:索引列值必须唯一,允许空值。 复合索引:索引包含多列信息。 复合索引的使用可以提升查询效率,尤其是在Where子句包含多个字段时。
7. 索引语法
索引创建可在表创建时同时添加,或随时通过ALTER命令添加。以下是常用命令示例:
创建普通索引:
CREATE INDEX idx_city_name ON city(city_name);
删除索引:
DROP INDEX idx_city_name ON city;
修改索引:
ALTER TABLE city ADD UNIQUE INDEX idx_city_name(city_name);
8. 索引设计原则
对频繁查询的表建立索引。 从Where子句中选择高频和过滤效果好的字段作为索引。 唯一索引提高区分度,提升索引效率。 避免索引过多,尤其是对DML操作频繁的表。 使用短索引,提升I/O效率。 利用最左前缀,创建复合索引以提升查询效率。 通过遵循这些原则,可以在提升查询性能的同时,减少索引维护的开销。
转载地址:http://ehdfk.baihongyu.com/