----------简译。
源=http://20bits.com/article/interview-questions-database-indexes
-----------问题
解释一下什么是数据库索引,和它的工作原理。
-----------回答
数据库索引是一种辅助数据结构,它能加快数据提取速度。
索引是针对某列数据的,比如查询“列出所有姓Smith的人”会很快。
如果硬盘上有个文本文件,如何从中找出姓Smith的呢?
查找的代码可以如下:
results = []
for row in rows:
if row[2] == 'Smith':
results.append[row]
找满足条件的记录需要检查每行数据是非符合条件。
这个算法和数据的行数成正比。
很多数据库的表可能含有几百万或几亿行数据,这个算法就行不通了。
如何加快查找速度呢?用数据库索引。
任何类型的数据结构,如果能支持快速访问,都可以被看作索引。
常见索引:Hash索引,B-tree索引。
-----------Hash索引
参照上例,找姓Smith的人,我们可以建一个hash表。hash表的key就是last_name,value可以是指向数据行的指针。
这类索引就叫hash索引。很多数据库都支持这里索引。
但是它不常用。为什么?
考虑另一个查询:找所有45岁以下的人。hash索引可以处理等于关系,但不处理小于或大于关系。
给你2个的hash索引,它无法判断那个值更大,只能判断它们是否相等。
-----------B-tree索引
数据库中最常用的是B-tree索引。它是一种自平衡的tree。
B-tree的主要好处是它允许对数阶复杂度的查找、插入和删除。
和hash索引不同之处在于,它存的数据是有序的,这样能处理小于、大于和前缀的查询。
-----------其它索引
数据库中,其它类型的索引还有R-tree[MySQL支持]。
R-tree索引用于查询空间数据,比如,查找所有离San Francisco, CA. 10英里之内的城市。
还有bitmap索引,它的读取速度很快,但是比较占存储空间。适用于值稀疏分布的列。
-----------Performance
索引加快了查询速度,但是要付出代价。
比如表的插入和删除速度会减慢,因为需要更新索引。
如果表需要不断更新,索引很可能会导致performance问题。
还有空间代价。索引会占用内存或磁盘空间。
单个索引比表小,因为它不存所有的表数据,而是存相应的指针。
但表越大,索引通常也会跟着变大。
-----------设计
B-tree中的节点包含一个值和一个指向子节点的指针。
数据索引的值实际上是一对值:field值和指向某行的指针。
比如,某个对age的索引,B-tree的值可以是这样:(34, 0x875900)。
这样索引可以被存在内存中。
B-tree索引的每个节点占用一个磁盘块。这样每个节点通过一次磁盘操作就能被完全读取。
很多数据库用B+ tree,而不是B-tree。InnoDB的BTREE索引类型就更近于B+ tree。
分享到:
相关推荐
数据库索引设计与优化是数据库管理系统中至关重要的一个环节,它直接影响到数据查询的效率、存储空间的使用以及系统的整体性能。在这个主题中,我们将深入探讨数据库索引的基础概念、设计原则、优化策略以及实际应用...
《数据库索引设计与优化》提供了一种简单、高效、通用的关系型数据库索引设计方法。作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地...
数据库索引重建及修复语句
高清完整版 数据库索引设计与优化 高清完整版 数据库索引设计与优化
数据库索引设计原则 数据库索引设计原则是 Oracle 数据库管理系统中的一项重要技术,旨在提高数据库的查询效率和性能。以下是数据库索引设计原则的详细解释。 一、基本原则 数据库索引设计原则的基本原则是确保...
《数据库索引设计与优化》提供了一种简单、高效、通用的关系型数据库索引设计方法。作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地...
数据库索引技术是数据库管理系统中的核心组成部分,它极大地提高了数据查询效率,使得在海量数据中查找特定信息变得迅速。下面将分别对标题和描述中提到的各个知识点进行详细阐述。 首先,我们来看“文件记录的组织...
### 数据库索引及优化详解 #### 一、数据库索引的重要性 数据库索引就像是图书中的目录,能够显著提升查询速度。例如,在执行查询 `SELECT * FROM table1 WHERE id = 44` 时,如果没有索引,系统需要逐行扫描整个...
数据库索引是数据库管理系统中用于加速数据检索的一种数据结构,它的设计目的是为了提高查询效率,减少数据访问的时间。本文将深入探讨数据库索引的概念、B-Tree数据结构以及索引的分类和作用。 首先,B-Tree是...
【数据库索引】是数据库管理系统中用于加速数据检索的一种数据结构。索引好比书籍的目录,能够快速定位到所需的数据行。根据物理存储方式,索引分为【聚簇索引】和【非聚簇索引】。聚簇索引是按照数据的实际存储顺序...
《Oracle与MySQL数据库索引设计与优化》这本书深入探讨了两个主流关系型数据库管理系统——Oracle和MySQL中的索引设计和优化策略。索引是数据库性能的关键因素,它们能够加速数据检索,提高系统效率,尤其在大数据量...
数据库索引作为数据库管理系统(DBMS)中的关键技术之一,其作用在于优化数据的检索速度和确保数据的唯一性。本文将深入探讨数据库索引的优缺点,以及如何在实际操作中合理地运用索引来提升数据库性能。 ### 数据库...
### 空间数据库索引技术的深度剖析 #### 核心知识点提炼: - **空间数据库索引技术的重要性**:空间数据库索引技术是提升空间数据库存储效率与空间检索性能的关键,尤其在处理大规模空间数据时更为显著。传统索引...
### Oracle数据库索引的维护 在Oracle数据库管理与优化的过程中,索引的维护是非常关键的一环。合理地创建、管理和优化索引能够显著提高查询性能,降低系统的响应时间,从而提升整个应用程序的效率。本文将从Oracle...