gpt4 book ai didi

sql-server - T-SQL - 更多条件是否有助于查询更快进行?

转载 作者:行者123 更新时间:2023-12-03 17:18:43 24 4
gpt4 key购买 nike

让我们考虑一个包含 2 个相关列的简单表格:

bit IsDownloaded not null
datetime DateDownloaded null

我知道只有当 DateDownloaded 有一个值时 IsDownloaded 才为 1(这只是一个例子,我知道那时 IsDownloaded 不是必需的)。

两者之间是否存在一些性能差异:

SELECT * 
FROM files
WHERE IsDownloaded = 1
AND DateDownloaded IS NOT NULL
AND DateDownloaded > '2010-01-01'

SELECT * 
FROM files
WHERE DateDownloaded IS NOT NULL
AND DateDownloaded > '2010-01-01'

因此它有助于:

  1. 添加“更易于评估”的条件(例如 bool 日期类型的条件)
  2. 一般添加模式条件

请考虑在任何列上都没有应用索引。

最佳答案

长话短说
一切都与索引和查询的选择性有关。在上述情况下,确保 DateDownloaded 上有索引将提高查询的性能 - IS NOT NULLIsDownloaded 检查获胜'帮助(如果标志与日期相关)。

解释
如果根本没有索引,除了遍历表中的所有行来评估您的 where 谓词(全扫描)之外,Sql 别无选择。

有了 DateDownloaded 上的索引,现在可以选择使用索引从对谓词其余部分的评估中排除行(前提是并非所有 文件 都具有 下载日期 > '2010-01-01')

(如果这只有 2 个状态,并且两个状态所代表的数据都少于 2%,那么索引 IsDownloaded 标志可能不是一个好主意)。

所以是的,在一般情况下,您应该始终使用任何可用的附加信息,这将进一步减少要评估的行数(尽管实际上这通常是一个自动过程,否则查询将返回错误的结果)。

但在这种情况下,鉴于您所说的 IsDownloaded 标志仅在还有 DateDownloaded 日期时才设置,将其包含在谓词(与 NOT NULL 一样),因为它不会排除除 > 2010-01-01 标准之外的任何其他行。

关于sql-server - T-SQL - 更多条件是否有助于查询更快进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22878803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com