如何在数据库中使用无索引的二进制搜索算法



假设我想运行这个查询

select * 
from table 
where column_1 = 12

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

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

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

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

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

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

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

最新更新