数据库索引 - 索引 - 上

本文探讨了在大型PostgreSQL数据库中如何高效地添加索引,包括为何在创建索引时应避免数据更新,以及索引如何影响ORDER BY的速度。还介绍了B-tree索引的优势,聚簇索引的概念,以及避免回表和利用覆盖索引来优化查询性能的策略。
摘要由CSDN通过智能技术生成

数据库索引 - 索引 - 上

索引

这一章节, 我想讨论一些有趣的事情.

大表如何加索引

在大表上创建一个索引将花费大量的时间; 默认情况下, 在创建的索引时, PostgreSQL 允许读数据 (select);
但是, 写数据的操作(insert, update , delete)会被阻塞, 直到索引创建完毕;

在生产环境下这是无法接受的;

那么, 在生产环境下, 怎么添加索引呢?
数据库提供了一种可以并发创建索引的方法

create index concurrently index_name on table_name();

在索引创建完成之后, 数据库系统不得不和数据表(table) 保持同步;
这额外添加了数据的更新的操作;
因此, 索引如果很少在查询中用到, 它应该被删除;

PostgreSQL在线创建索引你不得不注意的"坑"

为什么创建索引时, 不能有数据更新

答: 假如在创建索引时 如果有一条id = 100 数据插入;
此时, 索引上是没有id = 100 的记录的;

那么, 当下一次通过索引查询这条记录时, 数据库会找不到 id = 100 的记录;

因此, 数据库在创建索引时, 会锁表; 不能进行数据的更新;

索引会提高order by的速度吗

答: 会有影响; 但是只有 B-tree 会;

索引除了可以帮助查询以外, 还能够帮助查询返回特定的顺序;
尤其适用于 limit

对于一个需要扫描大量数据的查询, 一个显式的(explicit)排序可能比使用索引更快,
因为它遵循顺序访问模式,所以需要较少的磁盘I/O。

在查询的数据量小的时候, 索引可能会更有用;
举一个例子:

select * FROM employees 
order by name
limit 10

在上面的sql中, 我们使用 order bylimit

如果, 我们没有在 name 上加入索引;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值