集群索引与非集群的成本

时间:2015-05-26 18:26:14

标签: sql indexing

我从我正在阅读的SQL和数据库书中看到了一个练习,我对如何计算I / O中的聚簇索引与非聚簇的成本感到困惑。例如:

R在R.a上有一个非custering指数:
20.000行
1000页(内存)大小
R.a有20个唯一值

S在S.c上有一个custering指数:
40.000行
400页(内存)大小
S.c有200个唯一值

如果我从R中选择*,其中R.a = 100 I / O的成本是多少?

如果我从S中选择*,其中S.c = 50 I / O的成本是多少?

如何计算成本呢?

1 个答案:

答案 0 :(得分:2)

你可以做一些假设和猜测。对于此查询:

select r.* from R where R.a = 100

首先,你要弄清楚有多少记录,然后是多少页。假设有20个值,然后,假设值的分布是统一的,那么大约1/20个记录将匹配。每页包含大约20条记录(20,000行/ 1,000页)。因此,如果不进入复杂的统计数据,每页上都会有一条匹配的记录。

因此,I / O开销约为1,000页,加上索引所需的内容。

第二个查询需要读取大约1/200条记录,或大约200条记录。一个页面包含100条记录。但是,索引是聚类的,因此200条记录不是随机分布的;它们都在相邻的页面上。令人怀疑的是页面是否完全在给定值上开始,所以让我们调用这3页数据加上索引开销。