数据库索引 - 索引类型
索引类型
为什么索引有很多种
答: 在不同的场景下, 应该选择不同的索引;
pg 数据库提供了非常多的索引
- B-tree
- Hash
- GiST
- SP-GiST
- GIN
- BRIN
- 等等
每一种索引都有不同的算法, 它们适用于不同的类型的查询;
默认情况下, 会创建B-tree索引, 因为它适用于多数情况;
推荐阅读
这篇文章讲得特别好, 推荐大家去看看
我这里就只写 B-tree, hash, gin 这三个最常用的;
B-tree
B-tree 应用场景是什么
答: B-trees 适用于可以处理按某种顺序排序的数据上的相等和范围查询;
例如:
- id
- 用户名
- 身份证号码
- 行政编码
什么时候pg会使用B-tree索引
当一个被索引的列使用下面的操作符, PostgreSQL 的 query planner 将考虑使用 B-tree 索引.
<
<=
=
>=
>
BETWEEN
IN
IS NULL
orIS NOT NUL
当 LIKE 'foo%'
or col ~ '^foo'
时, 数据库的优化器(optimizer)也将使用 B-tree 索引;
但是, LIKE '%bar'
就无法使用了;
适用于 前缀匹配 (prefix matching)
怎么创建B-tree索引
答:
CREATE INDEX product_name_index ON product (name);
我们在 product 的name字段上加入B-tree索引;
顺便我们进行几个查询, 来验证索引的功效;
explain analyse
select *
from product
where name =