`

面试题:关于数据库索引

阅读更多

-----------简译。

源=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
another day
  • 大小: 28.9 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    数据库面试题数据库面试题.

    数据库面试题涵盖了数据库基础知识、数据结构、算法、面向对象编程、软件工程以及特定数据库系统(如Visual FoxPro和SQL)的使用等多个方面。以下是这些题目所涉及的关键知识点的详细解释: 1. **算法的执行效率与...

    mysql面试题 MySQL面试题 数据库面试题 SQL面试题

    mysql, 面试题, 数据库, 数据管理, 数据库管理, 数据库设计, sql, 数据查询, 数据库优化, 数据库安全, 数据库备份, 数据库恢复, 数据库性能, 数据库索引, 数据库事务, 数据库存储引擎, 数据库连接池, 数据库分库分表...

    数据库面试题(汇总所有的数据库面试题).zip

    这份"数据库面试题(汇总所有的数据库面试题).zip"压缩包显然包含了一系列与数据库相关的面试问题,旨在帮助求职者准备应对各种数据库面试挑战。以下是根据标题、描述以及可能的文件内容总结出的一些关键知识点: ...

    Oracle数据库DBA面试题50道及答案.pdf

    以下是针对给定的Oracle数据库DBA面试题的知识点详细解析: 1. **冷备份和热备份的区别及其优点**: - **热备份**:在数据库运行时(归档模式下)进行备份。优点是可以使用数据库,且可将数据库恢复到任意时间点。...

    SQL面试题汇总.pdf

    在SQL面试题(1)的答案中,使用了`RIGHT JOIN`将`testtable1`和`testtable2`进行连接。右连接返回所有右表(在这里是`testtable2`)的记录,即使在左表(这里是`testtable1`)中没有匹配的记录。对于左表中没有...

    SQLServer高频面试题及答案

    SQL Server高频面试题及答案 数据库基础知识篇 1. 主键、外键、超键、候选键 超键是关系模式中能唯一标识元组的属性集。候选键是最小超键,即没有冗余元素的超键。主键是数据库表中对储存数据对象予以唯一和完整...

    2024-25 互联网大厂资深自动化测试&测试开发面试精选面试题之-MySQL:Mongodb数据库面试题.pdf

    介绍:详述MySQL和MongoDB在测试开发中的常见面试题,涵盖数据库设计和优化等关键概念。 标签:#MySQL #MongoDB #数据库 #面试题 #SQL #NoSQL #查询优化 #索引 #数据迁移 #ACID

    最新JAVA面试题总结之数据库.docx

    "最新JAVA面试题总结之数据库" 这份面试题总结涵盖了数据库相关的多个方面,从基本概念到高级应用,以下是从中提炼出的知识点: 1. MySQL 中 delete 和 truncate 的区别: delete 语句执行删除的过程是每次从表中...

    数据库常见面试题型总结_数据库语句面试题

    数据库常见面试题型总结_数据库语句面试题 数据库常见面试题型总结是数据库方面常见面试题型的总结,涵盖了数据库语句、SQL 优化、Web 相关知识点等。以下是对标题和描述中所说的知识点的详细说明: 一、IN 和 ...

    数据库面试题索引sql优化

    ### 数据库面试题索引SQL优化 在数据库领域,尤其是对于从事数据库管理、开发工作的专业人士而言,面试过程中经常会被问及关于SQL查询优化以及索引的相关问题。这些知识点不仅是技术能力的重要体现,也是提高数据库...

    MySQL数据库工程师常见面试题

    ### MySQL数据库工程师常见面试题详解 #### 问题1:为什么GROUP BY和ORDER BY会使查询变慢? GROUP BY 和 ORDER BY 操作通常会增加查询的复杂度,从而导致性能下降。这是因为这两种操作通常需要对查询结果进行额外...

    【整理】数据库面试题索引sql优化+数据库SQL优化总结之百万级数据库优化

    首先,我们来看看"数据库面试题索引sql优化.pdf"可能涵盖的内容。 1. **SQL基础与语法**:面试通常会涉及到SQL的基本概念,如SELECT语句、JOIN操作、子查询、聚合函数(COUNT、SUM、AVG等)、WHERE和HAVING子句的...

    JAVA,数据库面试题集锦

    通过阅读"数据库笔试题汇总.doc"和"Java面试题大全.pdf",你将有机会接触到这些主题的实际问题和解答,从而深化理解和应用能力。准备充分的面试者不仅能够解答问题,更能展示出对JAVA和数据库领域的深度理解和实践...

    20 个mysql面试题(含答案)

    都是一些常见的 mysql 面试题,包括数据库基础知识、索引、事务等方面 都是一些常见的 mysql 面试题,包括数据库基础知识、索引、事务等方面 都是一些常见的 mysql 面试题,包括数据库基础知识、索引、事务等方面 都...

    2021年最新java面试题--视频讲解(内部培训84个知识点超详细).rar

    Java面试题67:数据库优化之数据库表设计遵循范式 Java面试题68:选择合适的数据库引擎 Java面试题69:选择合适的索引 Java面试题70:使用索引的一些技巧 Java面试题71:数据库优化之分表 Java面试题72:数据库的...

    数据库面试题-DBA数据库管理员

    数据库面试题-DBA数据库管理员 以下是从给定的文件中生成的相关知识点: 1. 数据抽象: 数据抽象是指数据库管理系统中对数据的抽象表示,可以分为物理抽象、概念抽象和视图级抽象。物理抽象关心的是数据的物理存储...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    │ Java面试题67:数据库优化之数据库表设计遵循范式.mp4 │ Java面试题68:选择合适的数据库引擎.mp4 │ Java面试题69:选择合适的索引.mp4 │ Java面试题70:使用索引的一些技巧.mp4 │ Java面试题71:数据库优化...

    数据库面试经典试题!!

    这些经典面试题涵盖了数据库的基础知识、设计原则、性能优化、安全措施以及分布式与非关系型数据库等内容。通过深入理解和实践这些知识点,不仅可以应对面试,更能提升你在实际工作中处理数据库问题的能力。

    MySQL面试题:基础知识与实战技巧

    MySQL是世界上最流行的关系型数据库管理系统之一,其面试题通常涵盖了基础概念、性能优化、事务处理、并发控制等多个方面。以下是一些重要的MySQL知识点,结合给定的面试题内容进行详细阐述: 1. **存储引擎的区别*...

    数据库工程师常见面试题.pdf

    以下是对文件“数据库工程师常见面试题.pdf”中提到的各个知识点的详细解释: 1. 关于groupby和orderby操作导致查询变慢的原因,主要是因为这两个操作在处理大量数据时,需要创建临时表以暂存处理结果。由于临时表...

Global site tag (gtag.js) - Google Analytics