Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Optimizing a query
Message
 
 
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:
01377962
Views:
17
1. Instead of multiple OR use IN operator.

2. The NOT IN subquery performs much better when re-written as LEFT JOIN as

select myField where myField not in (select myField from another table)

would be much quicker as

select myTable.myField LEFT JOIN AnotherTable on myTable.MyField = AnotherTable.myField where AnotherTable.PK IS NULL




>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?
If it's not broken, fix it until it is.


My Blog
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform