On 1/7/2014 3:45 PM, Mark Rotteveel wrote:

> The fact that the optimizer will (or should) optimize it in a specific 
> way does not mean you should abuse also it to get the optimizer to use 
> a specific optimization. It can lead to hard to find bugs in the 
> future, for example if you used SELECT FIRST 1000000 to trick the 
> optimizer (aka "I am never going to have more than a million"), fun 
> ensues when against all expectations you do pass the 1 million mark. 
> And yes, you can take the position that hints make for lazy 
> optimizers, on the other hand sometimes optimizers simply make bad 
> plans that I'd like to address 'now', and not 10 years down the road 
> when Oracle, Microsoft or the Firebird team finally finds time to do 
> something with my bug report. In my mind, a specific syntax for 
> optimization hints is better than abusing features that will trigger 
> specific optimizer behaviour: a separate syntax makes explicit that it 
> is an optimization (attempt), and future maintainers of your code 
> won't think you were an idiot for abusing 'feature X' in a way that 
> doesn't make sense, and they (or you) will be better aware of 
> consequences of changing it. And yes, you could document the abuse, 
> but I think most people forget to comment or will think it obvious. 
> With the SQL Server syntax optimizing for retrieval of the first 150 
> rows is done with: SELECT ... FROM someTable ... OPTION (FAST 150) It 
> also contains an interesting option (OPTIMIZE FOR) for 'helping' the 
> optimizer decide on a plan by providing exemplar values for parameters.

Let's get a little serious.  The LIMIT/OFFSET (FIRST in Firebird) is 
used when displaying rows by page for display.  In these cases, there is 
an obvious number of rows to ask for.  There are cases where it is clear 
that going to effort to retrieve unwanted rows in an otherwise optimal 
manner is a losing strategy.  I hope we're on the same page so far.

A preposterous use case was presented where somebody was going to burn 
hundreds of thousands of DVDs, but wanted to optimize the time for the 
first to start burning.  Despite the fact that it is a ludicrous case 
that should not be used as the basis for system design, we pointed out 
that FIRST <large number> would accomplish the task, which it will.  To 
argue that somebody might not pick a number "large enough" and result in 
an application malfunction is beyond lame.

No database application should be dependent on an optimizer to function 
correctly, just quickly and efficiently.  An optimizer can be reasonably 
expected to pick the best execution strategy given the data available to 
it.  As database architects, it is our job to define interfaces that 
provide the information that the optimizer needs to perform its work.  
The LIMIT/OFFSET clauses and syntactic variants fill the need precisely.

Personally, I don't like SQL.  I've never liked SQL.  I much prefer to 
use a language that I'm free to extend to implement semantics that I 
feel are important, hence the bipolar GDML/SQL nature of Interbase / 
Firebird.  The mantra of Interbase was "SQL: We don't fix, improve it, 
or extend it.  We just implement it.  We innovate in GDML."

My next database system, an implementation of the amorphous data model, 
is designed for highly parallel execution across an arbitrary number of 
machines.  The interface language (not SQL!) is designed to express 
semantics in such a way that the compiler and runtime can send pieces 
hither, thither, and yon to where ever the data might reside.  There 
will be no provision for hints, plans, or anything of the like.  "Tell 
me what you want, and I'll figure out how to do it.".  Humans should not 
be in the business of telling computers how best to do things.

Grumph.

                                 -- The Wolf





------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to