Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Optimizing a query
Message
From
29/01/2009 03:22:36
 
 
To
28/01/2009 18:13:40
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Environment versions
Visual FoxPro:
VFP 9 SP1
OS:
Windows XP SP2
Network:
Windows 2003 Server
Database:
Visual FoxPro
Application:
Web
Miscellaneous
Thread ID:
01377898
Message ID:
01378010
Views:
16
>The following query runs optimized:
>
>
>SELECT Temp.AddDate,Thread.NoThread,Thread.Title
> FROM (SELECT TOP 10 MIN(Thread.NoThread) AS NoThread,MAX(Thread.AddDate) AS AddDate,MAX(Thread.Numero) AS Numero
> FROM Thread
> WHERE Thread.AddDate>ldDate AND Thread.NoParent=0 AND (Thread.NoClient=44 OR Thread.NoClient=99 OR Thread.NoClient=51 OR 
> Thread.NoClient=37 OR Thread.NoClient=10 OR Thread.NoClient=39 OR Thread.NoClient=32 OR Thread.NoClient=41 OR Thread.NoClient=16 OR 
> Thread.NoClient=24 OR Thread.NoClient=50 OR Thread.NoClient=29 OR Thread.NoClient=28 OR Thread.NoClient=33 OR Thread.NoClient=38 OR 
> Thread.NoClient=36 OR Thread.NoClient=35 OR Thread.NoClient=21 OR Thread.NoClient=17 OR Thread.NoClient=5 OR Thread.NoClient=9 OR 
> Thread.NoClient=42 OR Thread.NoClient=52)
> GROUP BY Thread.NoThread ORDER BY 2 DESC) Temp
> INNER JOIN Thread ON Temp.NoThread=Thread.Numero
> ORDER BY Temp.AddDate DESC
>
>
>But, if I add a condition in it for a sub query, it is slow.
>
>
>SELECT Temp.AddDate,Thread.NoThread,Thread.Title
> FROM (SELECT TOP 10 MIN(Thread.NoThread) AS NoThread,MAX(Thread.AddDate) AS AddDate,MAX(Thread.Numero) AS Numero
> FROM Thread
> WHERE Thread.AddDate>ldDate AND Thread.NoParent=0 AND (Thread.NoClient=44 OR Thread.NoClient=99 OR Thread.NoClient=51 OR 
> Thread.NoClient=37 OR Thread.NoClient=10 OR Thread.NoClient=39 OR Thread.NoClient=32 OR Thread.NoClient=41 OR Thread.NoClient=16 OR 
> Thread.NoClient=24 OR Thread.NoClient=50 OR Thread.NoClient=29 OR Thread.NoClient=28 OR Thread.NoClient=33 OR Thread.NoClient=38 OR 
> Thread.NoClient=36 OR Thread.NoClient=35 OR Thread.NoClient=21 OR Thread.NoClient=17 OR Thread.NoClient=5 OR Thread.NoClient=9 OR 
> Thread.NoClient=42 OR Thread.NoClient=52) AND
> Thread.Numero NOT IN (SELECT Thread2.NoParent FROM Thread AS Thread2 WHERE Thread.Numero=Thread2.NoParent)
> GROUP BY Thread.NoThread ORDER BY 2 DESC) Temp
> INNER JOIN Thread ON Temp.NoThread=Thread.Numero
> ORDER BY Temp.AddDate DESC
>
>
>How can I adjust it so it would be optimized?

try to replace the NOT IN with
....
AND NOT EXISTS(SELECT NoParent FROM Thread AS Thread2 WHERE Thread.Numero=Thread2.NoParent)
Previous
Reply
Map
View

Click here to load this message in the networking platform