Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
SELECT Statement
Message
 
General information
Forum:
Visual FoxPro
Category:
Other
Miscellaneous
Thread ID:
00513062
Message ID:
00513352
Views:
14
>>>According to SYS(3054,1), you get partial Rushmore optimization using LIKE instead of and equal sign. Of course, you have to have an index tag on the expression used on the left side of the equation.
>>
>>Yep, I just tried:
>>
>>sys(3054,1)
>>select * from lender where short like "A%" && Partial
>>set ansi off
>>select * from lender where short="A"
&& Full
>>
>>But why it's partial? It uses short index in both cases...
>
>I ran a test of Like and Equal on a 3000 record table using the following code. My customer has an index on upper(city).
>clear
>lcAlpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>for K = 1 to 5
>   close tables all
>   lnStart = seconds()
>   for i = 1 to 100
>      for j = 1 to 26
>         cCity = substr(lcAlpha, j, 1)
>         select * from customer where upper(city) = ?cCity ;
>            into cursor crsTemp nofilter
>      endfor
>   endfor
>   lnFinish = seconds()
>   ?
>   ? "Equal:", lnFinish - lnStart
>   close tables all
>   lnStart = seconds()
>   for i = 1 to 100
>      for j = 1 to 26
>         cCity = substr(lcAlpha, j, 1) + "%"
>         select * from customer where upper(city) like ?cCity ;
>            into cursor crsTemp nofilter
>      endfor
>   endfor
>   lnFinish = seconds()
>   ? "Like:", lnFinish - lnStart
>endfor
>return
>For 2600 iterations of the same SQL except for the parameter value, I got the following results in seconds:
>Like     Equal
>------   ------
>28.183   27.830
>28.164   27.857
>28.114   27.867
>27.951   27.876
>27.951   27.857
>28.005   27.994
>28.117   27.971
>28.186   28.195
>28.188   27.903
>28.176   27.853
>The Like operation returns partial optimization, while the Equal operation returns full operation. YMMV.

Thanks, Mark. This proves, that like is not fully optimizable. So if you want to find records, which start from some letter, better use = in conjunction of SET ANSI OFF. Otherwise you have to use like operator or like function. BTW, there is a difference between these two.
LIKE operator uses % as any symbol, while like function uses *, if my memory serves me right.
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