Hi !
It's known that Firebird transforms this kind of query:
select
TableA.Foo
from
TableA
where
TableA.Bar in (select TableB.Bar where X=Y)
into:
select
TableA.Foo
from
TableA
where
exists (select * from TableB where where X=Y and TableB.Bar =
TableA.Bar)
This implies a correlated sub-query that will be executed every time for
each row on TableA
Since the sub-query is not correlated (on the original query) to the
outer query, FB could execute it first and use the values to execute the
outer query, something like:
select TableB.Bar where X=Y
Results in 1, 2, 3, 5, 7, 11
and then execute:
select
TableA.Foo
from
TableA
where
TableA.Bar in (1, 2, 3, 5, 7, 11)
When TableA is big there is a huge performance improvement using the
second method.
There is any plan to add this kind of otimization in FB 3 ?
I know there are other ways to write the same query, but in some cases I
could not rewrite the whole query, but just add a WHERE clause...
see you !
------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnnow-d2d
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel