索引和磁盘搜索如何在一起很好地发挥作用?

时间:2013-01-23 00:21:51

标签: database

我有another question但我会更具体。

我看到,在选择百万行表时,它需要< 1秒。我不明白的是它如何用索引做到这一点。似乎需要花费10毫秒才能进行搜索,因此它必须在1秒内完成它必须做的< 100seeks。如果每行有一个索引条目,那么1M行至少有1K块来存储索引(实际上如果每行8字节(32位索引值+ 32键偏移)则更高)。然后我们需要实际前往行并收集数据。数据库如何保持低搜索并尽可能快地提取数据?

1 个答案:

答案 0 :(得分:0)

一种方法是称为“聚簇索引”,其中表的行根据聚簇索引的排序进行物理排序。然后,当您想要在索引字段中读取一系列值时,您会找到第一个值,并且您可以立即读取所有值,而无需额外的IO。

此外:

1)读取索引时,将立即读入大块索引。如果下降B树(或沿着底部的孩子移动,一旦找到你的范围)移动你到另一个已经读入内存的节点,你就已经保存了一个IO。

2)如果SQL服务器统计期望检索的记录数量如此之高以至于从索引到基础行的随机访问要求将需要如此多的IO操作,那么执行表会更快扫描,然后它会进行表扫描。你可以看到这个,例如在SQL Server或PostgreSQL中使用查询计划程序。但对于小范围,索引通常更好,查询计划将反映这一点。