我无法理解这个问题在问什么:
给定表 EMPLOYEE
的属性 SALARY
的非密集索引,是否可能
回答查询
SELECT COUNT(*) FROM EMPLOYEE WHERE SALARY < 10,000
不执行文件的线性扫描?如果不是,您如何修改非密集索引以实现更高效的流程?
我了解查询要查找的内容,但我并不真正了解与执行查询相关的非密集索引的属性。由于 Employees 不一定具有薪水值,那么这是否意味着该索引是非密集的?
如果是这样,我不明白如何允许我更改索引以提高查询效率。
最佳答案
非密集索引有:
- 每个 block 一个条目
- 每个不同的值一个条目
密集索引有:
- 每条记录在索引中一个条目
薪水上的非密集索引包含每个不同薪水值的条目,但不是每个记录。因此索引不包含足够的信息来执行 COUNT(*) 而不恢复到数据文件的线性扫描。
如果 Salary 上的索引很密集,那么你可以执行
SELECT COUNT(*) FROM EMPLOYEE WHERE SALARY < 10,000
没有文件的线性扫描。
关于非密集索引的数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5657010/