CodeGym /课程 /SQL SELF /认识索引

认识索引

SQL SELF
第 37 级, 课程 0
可用

你之前肯定见过索引了。今天我们就来好好聊聊索引,让你彻底明白它们是怎么工作的。索引真的很牛,可以让你的查询快上几百甚至几千倍。你一定会喜欢的。那么,索引到底是什么?

想象一下,你在一个超大的图书馆里找一本书。如果没有任何查找顺序,这事儿能让你找一辈子。为了加快查找,书一般会按字母或者类别排好。数据库里的索引其实就是类似的原理。

正式点说,索引是为表里的行快速查找而创建的一种特殊的数据结构。 它能减少你需要扫描的数据量,让你更快找到想要的信息。

某种意义上,索引就像百科全书的目录,如果把整本书想象成一张表的话。
你不用从头到尾翻整本百科全书,而是直接用目录跳到你要的那一页。

比如说,employees 这张表有10万名员工。如果你要找姓“明”的员工,没有索引你得一条条翻(超慢)。有了索引,查找就快多了,因为Postgres知道去哪找。

索引是怎么工作的?

想明白索引怎么让查询变快,你得知道它们背后到底干了啥。索引是基于表里的一个或多个字段创建的,把数据组织成方便查找的结构。

PostgreSQL里的索引最常用的数据结构是B-Tree(平衡树)。它的原理大致是:

  1. 创建索引:把要建索引的字段数据组织成一棵树。
  2. 查找时:PostgreSQL用索引直接定位到需要的行,不用全表扫描。
  3. 树结构:树是有序的,可以很快从一个节点跳到另一个节点(就是二分查找算法)。

举个例子:假设有一张100万行的表。没有索引你得查100万次。有了索引,PostgreSQL可能只需要查几十次就能搞定。

什么时候用索引?

索引能大幅提升读操作的速度,比如:查找、过滤、排序。但代价是写操作(比如 INSERT、UPDATE、DELETE)会变慢,因为每次数据变动都要更新索引。

哪些场景必须用索引

经常查找: 如果你经常按某个字段查找,比如:

SELECT * FROM employees WHERE last_name = '明';

数据过滤: 比如你在 WHERE 或 HAVING 里加条件:

SELECT * FROM employees WHERE salary > 50000;

数据排序: 用 ORDER BY 排序时:

SELECT * FROM employees ORDER BY hire_date DESC;

表连接(JOIN): 如果你经常按某些字段把表连起来。

*什么时候*不该用索引

  • 如果表很小(比如只有10-50行),加索引没啥提升。
  • 如果你建索引的字段很少用在查询里。
  • 如果字段里的值很少有不同(比如 gender 字段只有2-3种值)。

举个例子:在 status 字段上建索引,而它只有“活跃”和“不活跃”两个值——其实没啥意义。

索引对性能的影响

你应该已经发现,索引让读查询变快,但写操作可能变慢。因为每次加、改、删数据时,PostgreSQL都得同步更新索引里的信息。

索引和性能的平衡

  • 如果表经常被改动,索引别建太多。
  • 如果表主要是查数据,索引绝对要有。

索引在现实生活中的好处

实际开发中,索引常常用来:

  1. 优化Web应用:让SQL查询飞快,页面加载也快。
  2. 搞定大表:没有索引,查几百万行的表能让你等到天荒地老。
  3. 扩展性:索引让你能轻松应对数据量暴增。

比如说,一个电商网站的商品和订单数据库,没索引的话,客户可能得等到明年页面才加载出来。

2
任务
SQL SELF, 第 37 级, 课程 0
已锁定
在表格中创建索引
在表格中创建索引
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION