Em 15/1/2014 10:37, Christian Kusenbach escreveu:
> Hi,
>
> I have a question about computed indices related to integer fields.
>
> In my program there are several selects on integer-fields with a STARTING 
> WITH clause.
>
> Firebird internally converts the integer value to a string and then filters 
> the value.
> It would be great if I could create a computed index on that (internal) 
> string so FB does an index-lookup for the data.
>
> I tried to create an computed index on a table with the expression 
> "CAST(MY_INT_FIELD AS VARCHAR(11))" cause I think firebird internally uses a 
> VARCHAR(11) or CHAR(11) value but that doesn't solve the problem.
>
> Any idea on how to get this working without changing every select in the 
> program?
>
> Thanks and best regards!
> Christian
>

I think you meant expression index instead of compound index....

The expression index will be used if the search criteria is the same as 
the expression index:

your example:

select * from MyTable where MyIntCollumn starting with '1'

you created an expression index as
Cast(MyIntColumn as varchar(11))

so, your query should be:
select * from MyTable where Cast(MyIntCollumn as varchar(11)) starting 
with '1'


So there is no way you could use the expression index without rewriting 
your query.

I have no idea why you are doing this kind of select but it lookslike 
weird to me... And since you will need to rewrite the query, perhaps 
could be a good idea to write it in a better way (in the last case, use 
a mirror collumn updated by a after insert/update trigger with the int 
value formated as you wish to search for).

see you !

Reply via email to