On 01/04/2014 12:08 AM, Ann Harrison wrote:

> Obviously,
> at least to me, if you've got to sort the data, you have to read all 
> of it.
> Furthermore, despite the everyone's instinct, it's a good deal faster in
> the general case to read a table in an optimal order and sort the data
> in memory that to read the data in index order - random order relative
> to storage.
>

Ann, from server POV you are definitely right. But when talking about 
ways to get first record from server as fast as possible we care about 
not server-only performance, but about performance of overall 
client-server system. Let me illustrate with a sample.

We have very simple table:

create table MOVIES
   (NAME varchar(255) primary key,
    COMMENTS varchar(8192),
    ISO_IMAGE blob);

And want to run such a query:

select * from MOVIES where COMMENTS like '%yacht%' order by NAME;

Two plans are possible:
PLAN SORT (MOVIES NATURAL)
PLAN (MOVIES ORDER RDB$PRIMARY1)

Cause we need to scan all the table first plan appears to be better - it 
requires less disk operations even taking into an account sort after 
scanning all the table. But overall throughput depends upon what are we 
going to do with ISO_IMAGE at client side. Imagine we want to burn DVDs 
with all images (and have the set of DVDs sorted after burning). In that 
case we should better start burning images as soon as possible, and it's 
likely that second plan, being non-optimal for server, will fit better 
this requirement and make it possible to complete the whole operation a 
bit faster. Even with a lot of extra reads from disk server will sooner 
of all find second record faster that DVD writer finishes with the first 
image.

Certainly this does not mean that for all queries, containing blobs, 
natural scan should not be used :-)
Even with this example we can find a lot of scenarios at the client side 
when first plan will work better. And here we get probably main result - 
it's absolutely impossible to predict at server side how returned data 
will be used by client. Therefore I agree with Dmitry - such a hint to 
optimizer is required part of SELECT statement if we want to have 
optimal performance for all the system, not for server only. (Telling 
true I do not understand why _THIS_ kind of hint is not part of SQL 
standard - may be people who deal with standard look at the world from 
server-only POV?)



------------------------------------------------------------------------------
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