DB
索引
- 索引的优化原理(简单版,为了举例说明本质):本质可以用这样一个例子理解:就是为某些属性在内存中建立了属性值到具体数据列磁盘地址的hash映射。当在做查询的时候,查询的where条件中有建立了索引的属性,就不会去读数据表查询(O(n)), 而是直接去查该属性对应的hash索引表(O(1)),获得查询的值所对应的那一行记录的磁盘地址,然后直接去读该行记录
- 上面的说法比较粗浅,只是为了抽象出索引为什么可以加快查询的一个本质:
- 实际在实现上:
- 索引本身存储在磁盘上,但数据库会通过缓存机制 (如Buffer Pool)将热点索引加载到内存,而非完全在内存中;也就是说,索引这种数据结构本身的持久化也是在硬盘上,而在真正的工作中,其是也是在内存中工作的,本质还是借助了内存读写快于硬盘
- 索引本质上是一种数据结构,没有唯一特定实现,hash只是一个典型案例,一般索引的实现是多种多样的:
-
B树/B+树 :主流数据库(如MySQL、SQL Server)默认使用,支持范围查询(
>、<、BETWEEN)、排序和模糊查询(LIKE)41014。 -
哈希索引 :仅适用于等值查询(如精确匹配),时间复杂度为O(1),但无法支持范围操作515。
-
位图索引 :针对低基数字段(如性别、状态),通过二进制位快速筛选数据
-
下面呢,是AI关于这段叙述的一个修正:
- 索引的本质是数据库中独立的数据结构(如B树、哈希树),通过预先排序或映射查询条件中的列值与数据存储位置的关系,减少磁盘I/O和数据扫描范围。当查询条件命中索引时,数据库可快速定位目标数据页(B树为O(log n),哈希为O(1)),但需权衡索引维护成本与存储开销,并注意特定场景(如范围查询、函数使用)对索引类型的选择。