Groups | Blog | Home
all groups > sql server programming > november 2005 >

sql server programming : Sub Query faster than inner Join?



Matthew
11/30/2005 7:29:01 PM
I have two tables:

Orders (8million records)
OrderNbr int,
OrderDate datetime,
ItemID int,
......
There's clustered index on OrderNber.

DeleteOrders (1000 records)
OrderNbr int
There's no index on DeleteOrders table.

When I use the below sub query,
delete from Orders where OrderNbr in (select OrderNbr from DeleteOrders)
it took me 14 mins,

while I use inner join,
delete Orders
from Orders,DeleteOrders
where Orders.OrderNbr = DeleteOrders.OrderNbr
or
delete Orders
inner join DeleteOrders
on Orders.OrderNbr = DeleteOrders.OrderNbr
it took me 20 mins.

What could be the problem? based on my experience, inner join should be much
Razvan Socol
11/30/2005 10:17:11 PM
Hi, Matthew

Try to add a unique (clustered) index on DeleteOrders (OrderNbr). This
may make both query faster, and possibly both will have the same
performance. For some idea about what's going on, look at the actual
execution plan in Query Analyzer.

Razvan
helmut woess
12/1/2005 12:00:00 AM
Am Wed, 30 Nov 2005 19:29:01 -0800 schrieb Matthew:

[quoted text, click to view]

Maybe the optimizer changes your statement into
delete from Orders where exists
(select * from from DeleteOrders where DeleteOrders.OrderNbr =
Orders.OrderNbr)

Can you check how long it would take with this statement?

bye,
Uri Dimant
12/1/2005 12:00:00 AM
Matthew

Have you cleaned cache before running those queries? inner join should work
on queries with lots of rows much faster that correlated subquery but test
it

[quoted text, click to view]

AddThis Social Bookmark Button