PostgreSQL中使用索引的优势和劣势

作者:瀚高PG实验室 (Highgo PG Lab)- Kalath
PostgreSQL中使用索引的优势有:
1、在WHERE从句中使用索引列可以加速查询。
2、B-树索引可以加速max()和min()聚合。
3、B-树索引可以加速ORDER BY从句。
4、索引可以加速连接,但是这还取决于优化器连接策略的选择。例如,hash连接不会用到索引。
5、外键约束上的B-树索引会在目标表中的行被删除时避免使用顺序扫描。
6、索引被用于加强约束。例如,唯一B-树索引被用于加强主键约束和唯一约束。
7、索引可以提供给优化器更好的值分布统计信息。如果在表达式上创建索引,ANALYZE不仅会收集表列中的数据分布统计信息,还会收集出现在索引中的每个表达式上的统计信息。这帮助优化器得到一个包含索引表达式的复杂情况选择度的较好预估,这样更好的执行计划就会被选择到。这是一个最容易被忽略的使用索引的优势。

之前列举了使用索引的各种优势,总体上是可以加快SQL查询速度,但是索引也有一些劣势:
1、索引会用尽空间。索引使用和数据本身大小相同的存储空间这种情况并不罕见,被索引占用的空间也会增大物理备份的大小和持续时间。
2、索引会减慢数据修改的速度。当对表进行插入或者删除操作时,所有的索引都需要被修改。
3、修改索引表的代价很容易比修改非索引表高一个数量级。特别是表中存放的是无序数据的时候。
4、索引会阻止热更新。因为PostgreSQL的数据结构中,每次更新会有一个新的行版本被写入,这会在表中每个索引上产生一个新条目。这种现象被称为“写入放大”。

综上所述,使用索引可以加速查询速度,对我们是有益的,但是因为索引会占用存储空间,所以我们需要去除掉不必要的索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值