对非密集索引的数据库查询

时间:2011-04-13 23:50:45

标签: database indexing

我无法理解这个问题的含义:

给定表SALARY的属性EMPLOYEE的非密集索引,是否可能 回答问题

SELECT COUNT(*) FROM EMPLOYEE WHERE SALARY < 10,000

没有执行文件的线性扫描?如果没有,您如何修改非密集索引以实现更高效的流程?

我理解查询的内容但我并不真正理解非密集索引的属性与执行查询有什么关系。既然员工不一定有薪水值,那么这意味着索引是非密集的?

如果是这样,我不知道如何允许我更改索引以提高查询效率。

1 个答案:

答案 0 :(得分:3)

非密集索引具有:

  • 每个区块一个条目
  • 每个不同值的一个条目

密集索引有:

  • 每条记录的索引中的一个条目

Salary上的非密集索引包含每个不同工资值的条目,但不包含每条记录。因此,索引不包含足以执行COUNT(*)的信息,而不会恢复为数据文件的线性扫描。

如果Salary的索引密集,那么你可以执行

SELECT COUNT(*) FROM EMPLOYEE WHERE SALARY < 10,000

没有文件的线性扫描。