Database 关系数据库中的二进制搜索

Database 关系数据库中的二进制搜索,database,query-optimization,Database,Query Optimization,我与员工有关系(员工id、财务名称、姓氏、工资、部门id)。如果我想使用二进制搜索执行查询,查询如下: SELECT * FROM employee WHERE salary> 10000 AND department_id = 60 我应该在工资和部门id中的任何一个或两者上建立索引以获得最低成本(磁盘中读取的最小块数) 谢谢 对于您的查询,最好的索引是员工(部门id,工资) 这是一个综合指数。列的顺序很重要,因为department\u id具有相等比较,而salary具有不相等性

我与员工有关系(员工id、财务名称、姓氏、工资、部门id)。如果我想使用二进制搜索执行查询,查询如下:

SELECT *
FROM employee
WHERE salary> 10000
AND department_id = 60
我应该在工资和部门id中的任何一个或两者上建立索引以获得最低成本(磁盘中读取的最小块数)


谢谢

对于您的查询,最好的索引是
员工(部门id,工资)

这是一个综合指数。列的顺序很重要,因为
department\u id
具有相等比较,而
salary
具有不相等性

如何实现这一点并不重要。大多数数据库将这种索引存储为b树,这将导致“二进制”搜索。但是,数据库可以利用多个处理器和多个磁盘。

您不需要“进行二进制搜索”。您提供数据库信息(即索引),让它做任何事情。在这种情况下,您可以考虑索引<代码>(部门代码ID,工资)< /代码>,这样索引的左边部分可以很快地缩小搜索空间。但是,如果部门id不合格,则需要在
(salary,…)
上建立索引,以便在查询计划器中使用。至于看哪一个是“最好的”或什么是“实际完成的”,请向查询计划员询问所使用的执行计划。(太多/不必要的索引可能和太少一样糟糕。)可能“二进制搜索”指的是“聚集索引”搜索……这是一种有序索引,数据库可以以树状方式搜索(到达目标叶节点,遍历最少数量的分支/页)。但是,一个表(至少Sql Server)只能有一个聚集索引,通常聚集索引是为主键或唯一属性保留的……因此,您不会将聚集索引放在salary和dept_id上,它将是一个非聚集索引,正如前面的注释所示。