问题描述
|
我无法理解这个问题在问什么:
给定表
EMPLOYEE
的属性SALARY
的非密集索引,是否可能
回答查询
SELECT COUNT(*) FROM EMPLOYEE WHERE SALARY < 10,000
不执行文件的线性扫描?如果不是,您如何修改非密集索引以使过程更有效?
我了解查询的内容,但我并不真正了解与执行查询相关的非密集索引的属性。由于存在员工不一定具有的薪水值,那么这意味着该指数是非密集的吗?
如果是这样,我看不到如何更改索引以提高查询效率。
解决方法
非密集索引具有:
每个块一个条目
每个不同的值都有一个条目
密集索引具有:
每个记录的索引中只有一个条目
薪水的非密集索引包含每个不同薪水值的条目,但不包含每个记录的条目。因此,索引不包含足够的信息来执行COUNT(*),而又不返回到数据文件的线性扫描。
如果薪水指数很高,那么您可以执行
SELECT COUNT(*) FROM EMPLOYEE WHERE SALARY < 10,000
无需线性扫描文件。