为什么查询喜欢
delete from A where F1 IN (1,2,3,5,5) and F2 IN (7,9,10,11)
太慢了(F1 和 F2 被索引,统计数据更新),你如何优化它们?
为什么查询喜欢
delete from A where F1 IN (1,2,3,5,5) and F2 IN (7,9,10,11)
太慢了(F1 和 F2 被索引,统计数据更新),你如何优化它们?
鉴于您的示例,我不确定您可以做些什么来提高性能。
但是,您的示例过于简单,如果您的示例在 IN 语句中使用子查询,那么它可能还有改进的余地,可能是通过使用 EXISTS 代替或只是加入。我认为这个问题的核心可能是关于 IN 语句的性能问题,对吧?
考虑性能时,您最好的工具是检查不同解决方案的解释计划,看看哪一个对您期望的数据量和类型最有意义。
这篇 SO 帖子解释了一些关于 IN 语句如何工作的信息......
这是一个还讨论性能因素的博客...
http://sqlknowledgebank.blogspot.com/2012/11/in-exists-clause-and-their-performance.html
通过猜测是一个双循环
我的示例是一个选择
首先优化选择要快得多
在PK上加入查询优化器可以使用更多
但是使用PK你不能插入5两次
create table #tempF1 (ID int primary key);
insert into #tempF1 values (1),(2),(3),(4);
create table #tempF2 (ID int primary key);
insert into #tempF2 values (1),(2),(3),(5);
select *
from tbl
inner merge join #tempF1
on tbl.F1 = #tempF1.ID
inner merge join #tempF2
on tbl.F1 = #tempF2.ID
可能不适用于您的情况并测试其他加入提示并且没有提示
我在一些具有复杂查询的大表上使用了这种技术,其中查询优化器变得愚蠢