非密集索引的数据库查询

标签 database indexing

我无法理解这个问题在问什么:

给定表 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/

相关文章:

sql - PostgreSQL 中的批量/批量更新/更新插入

sql - 什么是涵盖索引?

数据库与文件系统存储

php - 数以百万计的列表映射,100GB 数据顺利显示,建议

php - mysql查询3个表

python - 使用Python将json解析为Insert语句

HTML 敏捷包创建新的 HTMLNode

python - 根据Python中的索引合并两个包含字典的列表

mysql - 在优化 MySQL 查询时,高 key_len 值表示什么?

database - gremlin 查询的 Azure Cosmos DB 索引