gpt4 book ai didi

sql-server - SQL查询执行快捷方式OR逻辑?

转载 作者:行者123 更新时间:2023-12-03 06:57:09 25 4
gpt4 key购买 nike

我有三个表:

SmallTable
(id int, flag1 bit, flag2 bit)
JoinTable
(SmallTableID int, BigTableID int)
BigTable
(id int, text1 nvarchar(100), otherstuff...)

SmallTable 最多有几十条记录。 BigTable 有几百万,实际上是一个将该数据库中的表与同一服务器上另一个数据库中的表 UNIONS 的 View 。

这是连接逻辑:

SELECT * FROM
SmallTable s
INNER JOIN JoinTable j ON j.SmallTableID = s.ID
INNER JOIN BigTable b ON b.ID = j.BigTableID
WHERE
(s.flag1=1 OR b.text1 NOT LIKE 'pattern1%')
AND (s.flag2=1 OR b.text1 <> 'value1')

平均连接大小为几千个结果。显示的所有内容均已编入索引。

对于大多数 SmallTable 记录,flag1flag2 设置为 1,因此实际上没有必要甚至访问 BigTable.text1 上的索引,但 SQL Server 无论如何都会这样做,从而导致昂贵的索引扫描和嵌套循环。

有没有更好的方法来提示 SQL Server,如果 flag1flag2 都设置为 1,则不应这样做甚至懒得看text1

实际上,如果我可以在这些情况下完全避免连接到 BigTable(JoinTable 是托管的,因此这不会产生问题),这将使这个关键查询更快。

最佳答案

SQL bool 计算保证运算符短路。请参阅On SQL Server boolean operator short-circuit一个清晰的例子展示了假设运算符(operator)短路如何导致正确性问题和运行时错误。

另一方面,我的链接中的示例显示了 SQL Server 的作用:提供 SQL 可以使用的访问路径。因此,与所有 SQL 性能问题和疑问一样,真正的问题不在于 SQL 文本的表达方式,而在于存储的设计。 IE。查询优化器可以使用哪些索引来满足您的查询?

关于sql-server - SQL查询执行快捷方式OR逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2135626/

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