Subject | RE: [firebird-support] Indexes on subquery |
---|---|
Author | Svein Erling Tysvær |
Post date | 2013-11-29T07:08:09Z |
>Hi all,Of course indexes can be used in subqueries, Shingo, if not, Firebird wouldn't be much of a database. As Karol says, we may be able to help if you show us query and plan. I think it also would be good to know the number of records in all tables involved and the selectivity of the index you want to be used and other indexes used in your query.
>
>Is it the designed behavior that indexes are not used in subquery?
>If it is desined at present, the function for index in subquery will be implemented in versions of the future?
Having said all that, I was somewhat surprised about one query I issued yesterday:
SELECT max(MyField) FROM TableA
UNION
SELECT max(MyField) FROM TableB
used my descending indexes on MyField. However:
SELECT 'TableA' as TableName, max(MyField) FROM TableA group by 1
UNION
SELECT 'TableB', max(MyField) FROM TableB group by 1
used NATURAL for both tables (although surprised, it is understandable since my descending index on MyField would be difficult to use (and maybe useless) if I did SELECT <NonIndexedField>, max(MyField>...).
Hence, I changed my query to
with TA(MyField) as
(SELECT max(MyField) FROM TableA),
TB(MyField) as
(SELECT max(MyField) FROM TableB)
SELECT 'TableA' as TableName, MyField FROM TA
UNION
SELECT 'TableB', MyField FROM TB
to get the indexes back.
Set