索引全扫描什么时候优于全表扫描?1
发布网友
发布时间:2023-09-17 01:57
我来回答
共2个回答
热心网友
时间:2024-11-29 20:57
这个问题大致可以分为两种情况:
1 只使用索引就能够返回查询结果的查询,比如聚合查询中的函数count,max,min。
2 查询结果的记录数量小于表中记录一定比例的时候。这个主要是由于索引扫描后要利用索引中的指针去逐一访问记录,假设每个记录都使用索引访问,则读取磁盘的次数是查询包含的记录数T,而如果表扫描则读取磁盘的次数是存储记录的块数B,如果T>B 的话索引就没有优势了。对于大多数数据库来说,这个比例是10%(oracle,postgresql等),即先对结果数量估算,如果小于这个比例用索引,大于的话即直接表扫描。
热心网友
时间:2024-11-29 20:58
这要看你在干啥,题目太大了,举例子吧
select count(*) from t时主键索引全扫描一般要优于全表扫描,因为主键索引里已经包含所有记录的主键,求count时主键索引就足够了,而一般主键索引要远远小于数据表,所以效率更高
如果一个查询扫描索引后还要从表中读数据,这就得分情况了,主要是看IO大小,如果后面还得从表读出大部分块(注意是块,不是记录,块是数据库IO的最小单位),那就得不偿失了,如果数据分布极端不好,可能导致每一块里只有一条记录是需要的