0

为什么查询喜欢

delete from A where F1 IN (1,2,3,5,5) and F2 IN (7,9,10,11)

太慢了(F1 和 F2 被索引,统计数据更新),你如何优化它们?

4

2 回答 2

1

鉴于您的示例,我不确定您可以做些什么来提高性能。

但是,您的示例过于简单,如果您的示例在 IN 语句中使用子查询,那么它可能还有改进的余地,可能是通过使用 EXISTS 代替或只是加入。我认为这个问题的核心可能是关于 IN 语句的性能问题,对吧?

考虑性能时,您最好的工具是检查不同解决方案的解释计划,看看哪一个对您期望的数据量和类型最有意义。

这篇 SO 帖子解释了一些关于 IN 语句如何工作的信息......

SQL Server IN 与 EXISTS 性能

这是一个还讨论性能因素的博客...

http://sqlknowledgebank.blogspot.com/2012/11/in-exists-clause-and-their-performance.html

于 2013-08-02T14:09:56.370 回答
0

通过猜测是一个双循环

我的示例是一个选择
首先优化选择要快得多
在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

可能不适用于您的情况并测试其他加入提示并且没有提示

我在一些具有复杂查询的大表上使用了这种技术,其中查询优化器变得愚蠢

于 2013-08-02T14:30:33.930 回答