drupal 网站开发,wordpress 添加广告插件吗,python做电商网站,常州建站价格MySQL索引B树、全文索引、哈希索引
注意#xff1a;B树中B不是代表二叉树#xff08;binary#xff09;#xff0c;而是代表平衡#xff08;balance#xff09;#xff0c;因为B树是从最早的平衡二叉树演化而来#xff0c;但是B树不是一个二叉树。
B树的高度一般在2~…MySQL索引B树、全文索引、哈希索引
注意B树中B不是代表二叉树binary而是代表平衡balance因为B树是从最早的平衡二叉树演化而来但是B树不是一个二叉树。
B树的高度一般在2~4层因此每次查询最多只需要2~4次IO。
1. B树索引BTREE
特点
B树是一种自平衡的多路搜索树它是一种高度平衡的结构保证从根节点到任意叶子节点的路径长度几乎相等从而保证了查询效率相对稳定。
B树索引的所有数据都存储在叶子节点并且叶子节点之间通过双向链表连接形成了一个有序的数据集合。
支持范围查询、排序和分组操作因为叶子节点是有序排列的。
可以是单列索引或多列索引复合索引并遵循最左前缀匹配原则即在查询时如果查询条件包含了复合索引的最左边部分列就能利用索引进行高效查询。
适用于大部分查询场景特别是等值查询、范围查询以及基于索引列的排序和分组。
优点
查询效率较高尤其是对于范围查询和有序结果集的获取。
能够处理大量数据因为B树的高度较低即使数据量很大查询深度也不会过高。
缺点
对于非常小的数据集建立和维护B树索引可能比直接全表扫描更耗时。
对于等值查询如果键值分布不均匀导致哈希冲突较少哈希索引可能更快。
2. 全文索引
特点
全文索引主要用于对文本类型的字段如VARCHAR、TEXT进行全文本搜索能够处理复杂的查询条件如包含某个词语或短语、近似匹配、词干提取等。
MySQL的全文索引通常基于倒排索引实现即为每个单词建立一个索引项记录下包含该单词的所有文档在数据库中对应为记录的列表及位置信息。
通常用于大型文本数据的全文检索如博客文章、产品描述、文献资料等。
优点
非常适合进行复杂文本内容的模糊查询和关键词搜索。
提供了对文本数据的高效过滤能力显著减少针对文本字段进行LIKE %keyword%这类操作时的全表扫描。
缺点
创建和维护全文索引需要消耗额外的空间和时间资源。
索引更新时有延迟对于实时性要求较高的场景可能不合适可通过手动刷新解决。
对查询语法有一定要求需要使用MATCH AGAINST语句而非普通的WHERE子句。
对于短词、停用词如“的”、“是”等常见词汇的处理可能不够精确可能需要配合语言分析器和定制化配置。
3. 哈希索引HASH
特点
哈希索引基于哈希表实现通过哈希函数将键值转换为固定长度的哈希值然后通过哈希值直接定位到对应的记录。
主要适用于等值查询查询效率极高只需一次哈希计算即可找到相应记录假设没有哈希冲突。
不支持范围查询、排序和分组操作因为哈希索引并不保持键值的有序性。
对于键值唯一性高的列如唯一标识符哈希索引效果尤为出色。
通常用于内存型存储引擎如MEMORY引擎或者InnoDB引擎的自适应哈希索引Adaptive Hash IndexAHI。
优点
等值查询性能极高尤其在键值分布均匀且唯一性强的情况下。
查找时间复杂度接近O(1)在理想情况下能提供极快的查询速度。
缺点
只适用于等值查询无法处理范围查询、排序和分组。
如果键值分布不均导致哈希冲突较多性能会下降尤其是在存在大量重复键值的情况下。
不支持部分索引列的匹配如复合索引的部分列查询。
哈希索引不存储原始键值只存储哈希值和行指针因此不能避免对数据行的访问来获取完整数据。 如果大家需要视频版本的讲解欢迎关注我的B站