首页 > 解决方案 > 如何在数据库中使用没有索引的二进制搜索算法

问题描述

假设我想运行这个查询

select * 
from table 
where column_1 = 12

我知道二进制搜索是如何工作的,也许如果我在 上创建索引column_1,dbms 将使用二进制搜索。

这里的问题:创建索引后如何在这种情况下使用不同的算法,这是否适用?

标签: sqldatabasealgorithmdata-structures

解决方案


SQL 是一种声明性语言,意思是,你定义你想要实现的目标,但它应该如何完成是由数据库引擎决定的。

在某些情况下/产品中,您可以强制执行该行为,但通常使用什么算法来获得结果不受用户控制。

大多数数据库引擎将尝试以最佳方式获得所需的结果,这是由引擎根据它所拥有的关于查询和底层数据的信息来确定的。

索引通过提供有关可能值、它们的选择性等信息来帮助数据库引擎理解数据,但最终数据库引擎将决定是否使用索引。

假设您在存储用户详细信息的表上有一个索引。索引本身位于“created_at”列上,这是创建记录的时间。现在让我们说,您于 2019 年 9 月 1 日开始开展业务。现在,如果您有这样的查询:SELECT * FROM users WHERE created_at > '2019-01-01',数据库引擎可以使用索引,但所有记录都将匹配 where 条件,因此引擎很可能会决定迭代聚集键,而不是使用索引,因为寻找索引,比查找所有记录需要更多的资源,而不是简单地读取整个表。但是,如果您使用不同的日期(例如 2021-09-01)执行查询,则很可能会使用该索引。


推荐阅读