> > When I use the query:
> >
> > select * from mytable where myfield like :myparameter
> >
> > and define myparameter = 'test'
> >
> > the plan doesn't use the index (natural) and my query returns slowly.
> >
>
> 
> Once it's a parameter, the parameter could hold any value like:
> 'ABC'
> 'ABC%'
> '%ABC'
> 
> the first two could use an index during a search the last on could not 
> use any index.
> 
> The optimizer shoul prepare the path for all the scenarios.


Of course, thank you for your answer. I create my queries dynamically each time 
and thought the use of parameters would be less problematic (escaping etc.).

> 
> You could change your query to something like:
> 
> select * from mytable where myfield starting with :myparameter
> 
> This way an index would be used.
> 
> In fact in a non parameterized query, your original query has a kind of code 
> injection, and become something like:
> 
> select * from mytable where myfield like 'test%'
>   and myfield starting with 'test'
> 
> Thus the index could be used.
> 

Yes, that's a possibility. But I think I still need to create the statement 
without parameters for string values to give my users the maximum flexibility 
and performance. Once again, thank you for you answer.

Reply via email to