为什么在SQL Server ce中,ID为NOT IN(int id列表)查询的Select*FROM Table是慢的?

Kar*_*rim 3 sql performance sql-server-ce

以及这个问题在sql server中是通用的,
我在所有字段上都有索引.
同样的查询,但ID IN(int ID列表)非常快.
我试图将查询更改为OUTER Join,但这只会让情况变得更糟.所以有关为什么会发生这种情况以及如何解决这个问题的任何提示?

Eri*_*ler 8

那是因为索引对这种查询并不真正有用,因此数据库必须进行全表扫描.如果查询(由于某种原因)慢于简单的"SELECT*FROM TABLE",请执行此操作并过滤程序中不需要的ID.

编辑:通过您的评论,我认识到您使用子查询而不是列表.因此,有三种可能的方法(希望其中一种更快):

原始声明:

select * from mytable where id not in (select id from othertable);
Run Code Online (Sandbox Code Playgroud)

备选方案1:

select * from mytable where not exists 
   (select 1 from othertable where mytable.id=othertable.id);
Run Code Online (Sandbox Code Playgroud)

备选方案2:

select * from mytable
minus
select mytable.* from mytable in join othertable on mytable.id=othertable.id;
Run Code Online (Sandbox Code Playgroud)

备选方案3 :(丑陋且难以理解,但如果其他一切都失败了......)

select * from mytable
  left outer join othertable on (mytable.id=othertable.id)
  where othertable.id is null;
Run Code Online (Sandbox Code Playgroud)