sql - 如何在数据库中使用没有索引的二进制搜索算法
问题描述
假设我想运行这个查询
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 条件,因此引擎很可能会决定迭代聚集键,而不是使用索引,因为寻找索引,比查找所有记录需要更多的资源,而不是简单地读取整个表。但是,如果您使用不同的日期(例如 2021-09-01)执行查询,则很可能会使用该索引。
推荐阅读
- c# - 无法在 C# 中验证 Google oAuth JWT
- c# - 为什么 timer_Tick 代码运行时我的程序会冻结?
- c# - 在 Windows 窗体的选项卡控件中与多个页面共享一个按钮
- c# - C# SameSite 标志问题
- c# - 将 StorageFileQueryResult 与图像元数据一起使用时,StorageFile.GetImagePropertiesAsync() 会给出错误的结果
- reactjs - MobX。@observable 有效,但 @computed 无效
- python - 用零填充行其他列有一些值,否则其他列没有值在python pandas中用NaN填充
- python - 用于 Linux Syslog 的 Python 脚本在唯一 IP 上使用计数器失败的用户登录尝试
- python - 什么是 _md5.md5,为什么 hashlib.md5 这么慢?
- google-sheets - 有没有办法在 Google 表格中使用数组公式评估多列,然后生成结果行?