索引简单介绍

本文介绍了数据库索引的概念及作用,包括加快SQL执行速度、提高数据访问效率等,并探讨了索引的缺点如占用物理空间及维护成本等问题。文中还提到了三种常见的索引类型:唯一索引、主键索引和聚集索引。

今天面试时被问到索引的原理,之前在学习数据库的时候,研究了一下,但是不经常使用,或者说使用创建索引的时候也就是几句命令,所以对原理性的东西并没有掌握。
因此用一篇简短的文章来简单回顾一下索引的基本知识,等抽空研究原理。
首先说说什么是索引,类似与书的目录。
概念:
1.索引是对数据库表中一列或多列的值进行排序的一种数据结构。使用索引可以快速访问数据库中表的特定信息。
2.在关系数据库中,索引是一种与表有关的数据库结构。可以使对应表的SQL执行得更快
3.索引提供指向存储在表的制定列中的数据值的指针,然后根据指定的排序顺序对这些指针进行排序
索引的缺点:
1.占用物理空间
2.当对表中的数据进行增加、删除或者修改的时候,索引也要动态的维护,降低效率
索引类型(这里写了三种):
1.唯一索引:不允许任何两行具有相同值的索引,例如为学生表的身份证创建唯一索引,任何两个学生的身份证都不能相同。通常为了获得更佳的效果,建议改用主键或者唯一约束
2.主键索引:先说说什么是主键,主键就是一条记录的一个或多个字段,这些字段的值可以唯一标志这条记录。主键索引是唯一索引的特定类型。该索引要求主键中的每个键都有唯一值
3.聚集索引(这个我没有理解,以后会专门写一篇):聚集索引基于聚集索引键按顺序排序和存储表或视图中的数据行。聚集索引按 B 树索引结构实现,B 树索引结构支持基于聚集索引键值对行进行快速检索。


 

### 不同类型的 MySQL 索引及其用途 #### B+树索引 B+树索引是 MySQL 中最常用的索引类型之一,广泛应用于 InnoDB 和 MyISAM 存储引擎中。它通过一棵平衡的多路查找树结构实现快速的数据检索。这种索引的优点在于能够高效处理范围查询、排序操作以及精确匹配查询。由于其设计特性,B+树索引不仅支持单列索引,还支持复合索引,并且能够在不破坏整体性能的情况下动态调整节点分布。 对于范围查询(`>`、`<`、`>=`、`<=`)、顺序扫描或者基于多个字段的复杂条件过滤,B+树索引表现尤为出色[^2]。 ```sql CREATE INDEX idx_btree ON table_name (column_name); ``` --- #### 哈希索引 哈希索引利用哈希函数将键值映射到具体的物理位置,从而实现了极高的查询效率。然而,它的局限性也很明显——仅能用于等值比较(`=`, `IN()`),无法支持范围查询或部分匹配查询。此外,在存在大量重复值的情况下,哈希冲突可能导致性能下降。因此,哈希索引通常只适合那些需要频繁执行简单相等判断的应用场景。 需要注意的是,只有 MEMORY/HEAP 表默认采用哈希索引机制;而其他存储引擎则需显式指定创建方式才能启用该功能[^2]。 ```sql CREATE HASH INDEX idx_hash ON table_name (column_name); ``` --- #### 全文索引 全文索引专为自然语言文本搜索优化设计,特别适用于大数据量环境下的关键词定位需求。相比传统方法逐条记录遍历字符串内容而言,这种方式极大地提升了速度与灵活性。不过值得注意的是,目前仅有 MyISAM 及自 MariaDB 10.5 版本起新增的支持此特性的 Aria 引擎允许建立此类特殊形式的索引[^1][^2]。 另外还需强调一点,即当涉及跨表联合分析或多语种混合表达时,则可能面临一定挑战,因为标准配置下尚缺乏内置解决方案应对这些高级情形。 ```sql ALTER TABLE articles ADD FULLTEXT(title, content); SELECT * FROM articles WHERE MATCH(title,content) AGAINST('search term'); ``` --- #### 空间索引 空间索引主要用于地理信息系统(Geographic Information System,GIS),针对二维甚至更高维数的空间对象集合提供高效的访问路径。例如,如果数据库里保存着城市地图上的建筑物坐标信息,那么借助 R-Tree 类型的空间索引就可以迅速找到某个特定区域内的所有建筑实例[^1]。 尽管如此,鉴于当前版本 MySQL 对于GIS方面的原生支撑力度有限,实际生产环境中往往更倾向于选用专门化程度更高的第三方工具替代之。 ```sql CREATE SPATIAL INDEX spatial_idx ON geom_table(geom_column); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值