-----------简译。
源=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。
another day
- 大小: 28.9 KB
分享到:
相关推荐
数据库面试题涵盖了数据库基础知识、数据结构、算法、面向对象编程、软件工程以及特定数据库系统(如Visual FoxPro和SQL)的使用等多个方面。以下是这些题目所涉及的关键知识点的详细解释: 1. **算法的执行效率与...
mysql, 面试题, 数据库, 数据管理, 数据库管理, 数据库设计, sql, 数据查询, 数据库优化, 数据库安全, 数据库备份, 数据库恢复, 数据库性能, 数据库索引, 数据库事务, 数据库存储引擎, 数据库连接池, 数据库分库分表...
这份"数据库面试题(汇总所有的数据库面试题).zip"压缩包显然包含了一系列与数据库相关的面试问题,旨在帮助求职者准备应对各种数据库面试挑战。以下是根据标题、描述以及可能的文件内容总结出的一些关键知识点: ...
以下是针对给定的Oracle数据库DBA面试题的知识点详细解析: 1. **冷备份和热备份的区别及其优点**: - **热备份**:在数据库运行时(归档模式下)进行备份。优点是可以使用数据库,且可将数据库恢复到任意时间点。...
在SQL面试题(1)的答案中,使用了`RIGHT JOIN`将`testtable1`和`testtable2`进行连接。右连接返回所有右表(在这里是`testtable2`)的记录,即使在左表(这里是`testtable1`)中没有匹配的记录。对于左表中没有...
SQL Server高频面试题及答案 数据库基础知识篇 1. 主键、外键、超键、候选键 超键是关系模式中能唯一标识元组的属性集。候选键是最小超键,即没有冗余元素的超键。主键是数据库表中对储存数据对象予以唯一和完整...
介绍:详述MySQL和MongoDB在测试开发中的常见面试题,涵盖数据库设计和优化等关键概念。 标签:#MySQL #MongoDB #数据库 #面试题 #SQL #NoSQL #查询优化 #索引 #数据迁移 #ACID
"最新JAVA面试题总结之数据库" 这份面试题总结涵盖了数据库相关的多个方面,从基本概念到高级应用,以下是从中提炼出的知识点: 1. MySQL 中 delete 和 truncate 的区别: delete 语句执行删除的过程是每次从表中...
数据库常见面试题型总结_数据库语句面试题 数据库常见面试题型总结是数据库方面常见面试题型的总结,涵盖了数据库语句、SQL 优化、Web 相关知识点等。以下是对标题和描述中所说的知识点的详细说明: 一、IN 和 ...
### 数据库面试题索引SQL优化 在数据库领域,尤其是对于从事数据库管理、开发工作的专业人士而言,面试过程中经常会被问及关于SQL查询优化以及索引的相关问题。这些知识点不仅是技术能力的重要体现,也是提高数据库...
### MySQL数据库工程师常见面试题详解 #### 问题1:为什么GROUP BY和ORDER BY会使查询变慢? GROUP BY 和 ORDER BY 操作通常会增加查询的复杂度,从而导致性能下降。这是因为这两种操作通常需要对查询结果进行额外...
首先,我们来看看"数据库面试题索引sql优化.pdf"可能涵盖的内容。 1. **SQL基础与语法**:面试通常会涉及到SQL的基本概念,如SELECT语句、JOIN操作、子查询、聚合函数(COUNT、SUM、AVG等)、WHERE和HAVING子句的...
通过阅读"数据库笔试题汇总.doc"和"Java面试题大全.pdf",你将有机会接触到这些主题的实际问题和解答,从而深化理解和应用能力。准备充分的面试者不仅能够解答问题,更能展示出对JAVA和数据库领域的深度理解和实践...
都是一些常见的 mysql 面试题,包括数据库基础知识、索引、事务等方面 都是一些常见的 mysql 面试题,包括数据库基础知识、索引、事务等方面 都是一些常见的 mysql 面试题,包括数据库基础知识、索引、事务等方面 都...
Java面试题67:数据库优化之数据库表设计遵循范式 Java面试题68:选择合适的数据库引擎 Java面试题69:选择合适的索引 Java面试题70:使用索引的一些技巧 Java面试题71:数据库优化之分表 Java面试题72:数据库的...
│ Java面试题67:数据库优化之数据库表设计遵循范式.mp4 │ Java面试题68:选择合适的数据库引擎.mp4 │ Java面试题69:选择合适的索引.mp4 │ Java面试题70:使用索引的一些技巧.mp4 │ Java面试题71:数据库优化...
这些经典面试题涵盖了数据库的基础知识、设计原则、性能优化、安全措施以及分布式与非关系型数据库等内容。通过深入理解和实践这些知识点,不仅可以应对面试,更能提升你在实际工作中处理数据库问题的能力。
MySQL是世界上最流行的关系型数据库管理系统之一,其面试题通常涵盖了基础概念、性能优化、事务处理、并发控制等多个方面。以下是一些重要的MySQL知识点,结合给定的面试题内容进行详细阐述: 1. **存储引擎的区别*...
以下是对文件“数据库工程师常见面试题.pdf”中提到的各个知识点的详细解释: 1. 关于groupby和orderby操作导致查询变慢的原因,主要是因为这两个操作在处理大量数据时,需要创建临时表以暂存处理结果。由于临时表...