数据库索引 - 索引 - 下
本节总结一些索引使用上的优化
很多内容来自 数据库索引设计与优化
使用索引一定比全表扫描快吗
答: 不一定
使用一个不恰当的索引可能会导致比全表扫描更差的性能;
我们假设有一张 product 表;
id 是主键
select * from product
where id = 1000
我们可以看到数据库, 会选择使用索引
Index Scan using product_pkey on product
(cost=0.43..8.45 rows=1 width=72) (actual time=0.825..0.828 rows=1 loops=1)
但是, 下面这种情况则会执行全表扫描
select * from product
where id > 1000
Seq Scan on product
(cost=0.00..392017.49 rows=10027140 width=72) (actual time=2.107..3382.401 rows=9999000 loops=1)
Buffers: shared hit=11884 read=254783
那么, 为什么会造成这种情况呢?
我们知道把数据从硬盘读取到内存中, 通常有 2 种方法
- 随机 IO