索引一定能提高性能吗?

上一篇我们介绍了数据库事务的概念和重要性、事务的 ACID 属性,以及并发事务的控制与隔离级别。

今天我们讨论与性能相关的一个重要对象:索引(Index)。你一定听说过:索引可以提高查询的性能。那么,索引的原理是什么呢?有了索引就一定可以查询的更快吗?索引只是为了优化查询速度吗?接下来我们就一一进行解答。

索引的原理

以下是一个简单的查询,查找工号为 5 的员工:

SELECT *
  FROM employee
 WHERE emp_id = 5;

数据库如何找到我们需要的数据呢?如果没有索引,那就只能扫描整个 employee 表,然后使用工号依次判断并返回满足条件的数据。这种方式一个最大的问题就是当数据量逐渐增加时,全表扫描的性能也就随之明显下降。

为了解决查询的性能问题,数据库引入了一个新的数据结构:索引。索引就像书籍后面的关键字索引,按照关键字进行排序,并且提供了指向具体内容的页码。如果我们在 email 字段上创建了索引(例如 B-树索引),数据库查找的过程大概如下图所示:

btree

B-树(Balanced Tree)索引就像是一棵倒立的树,其中的节点按照顺序进行组织

猜你喜欢

转载自blog.csdn.net/horses/article/details/108729085