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 !