群集和非群集索引如何使搜索更快?

时间:2014-06-08 04:52:23

标签: database indexing clustered-index non-clustered-index

聚簇索引以物理方式对磁盘上的数据进行排序。

假设我有桌面员工和columd employee_id。现在我将值9, 6, 10, 4存储在employee_id下。在employee_id上​​使用聚簇索引。 磁盘上的值将以排序的方式存储,即4,6,9,10。现在如果我在employee_id上​​搜索id为9,数据库可以使用搜索算法 比如二进制搜索或其他一些id为9的快速点记录。所以它可能不会像二进制搜索那样在一次操作中记录。 这是正确的吗?

非聚集索引 非聚集索引具有来自保持有序的索引列的数据的副本 以及指向实际数据行的指针(指向聚簇索引的指针,如果有的话)。所以如果采取与上面相同的例子。 在这种情况下,数据库将创建单独的对象来存储数据以及内存位置。像这样的东西

9 - 其植物位置

6 - 其植物位置

10 - 其植物位置

4 - 其植物位置

所以我首先需要在新创建的对象中搜索10并获取其内存  地点。然后回到原始内存位置。 那怎么会让搜索更快?

另据我的理解,应该在where子句不在select子句下的相关列上创建索引。 从右吗

1 个答案:

答案 0 :(得分:0)

考虑一个更大的数据集 - 不是四个值,而是一百万个。一旦找到正确的物理位置,通过索引查询可能确实需要从表中执行另一次读取的开销很小,但是对于大型数据集,当您考虑将索引与执行完整扫描的速度进行比较时,它可以忽略不计在未分类的桌子上。