On Tue, 4 Sep 2007, Lucio Chiappetti wrote:
> I'll do some experimenting and report back.
In lack of better ways of doing a tie-break, I've done the following
tests (with the linemode client), checking both the results of a query and
the total time spent. I tested 16 different combinations of arbitrary
WHERE conditions and correlation with an arbitrary external tables, using
my "maximal" G (the one with 26 members).
For each I tested 3 cases (total 16*3=48) :
a) the query on the "virtual" table correlated with the external
(the virtual is my G left join t1 ... left join tn). This involves
the lowest number of joins (29) and is of course the fastest (and
also the easiest to get access to "hidden" columns by name, but
is not what I intend our users use because the way to select columns
is clumsy (they should use a VIEW on the 26 members instead ...
normally with no correlation on external that will be equally fast),
but represents my REFERENCE, i.e. I checked the results of the other
test to be the same as this.
b) the query on the VIEW V with "members also" (which implies a redundant
join of V with G left join t1 ... left join tn) and correlated with
an external table. Doubles the joins (59). I used here
SELECT STRAIGHT_JOIN.
c) the same query of (b) but with a normal select, and preceded by
setting optimizer_search_depth=0 (auto).
I did each test in a fresh mysql session to prevent cached valued to
affect the timings.
The good news are that all query go to end without getting stuck in the
statistics state, and that (a),(b),(c) for the same query return the same
results.
Considering the timing instead :
(a) are obviously the fastest (from 0.0 to 0.63 seconds at worst)
(b) the queries with SELECT STRAIGHT_JOIN ("not optimized" ?) are
*in general* the slowest but not too slow, i.e. complete within from
0.8 to 1.9 sec. There are however a couple of cases involving one
external table in which they are slower (though not unfeasible),
from 3 to 12 sec in one case, and from 24 to 45 sec in another.
(c) the queries with optimizer_search_depth=0 have a speed comparable
with (b). *In general* they are marginally faster than (b) (0.7
to 1.6 sec) when (b) is reasonably fast. When (b) is slow,
however (c) is TWICE AS SLOWER (5 to 23 and 48 to 89 sec)
The explain select does not give obvious clues while those particular
table combinations are slower, and, considered that the queries involving
"view + member also + external" concern an absolute minority of users [*]
it is not worth spending more time investigating.
[*] actually a larger minority (I hope it remains such) of our "public"
users accesses the DB once to "take away" all data without performing any
selection :-(
My inclination therefore would be to prefer optimizer_search_depth=0
to SELECT STRAIGHT_JOIN *if* it can be easily arranged in our tomcat
environment, because of the marginal increase in speed despite the
occasional worsening. But the two look almost equivalent.
--
-----------------------------------------------------------------------
Lucio Chiappetti - INAF/IASF - via Bassini 15 - I-20133 Milano (Italy)
For more info : http://www.iasf-milano.inaf.it/~lucio/personal.html
-----------------------------------------------------------------------
() ascii ribbon campaign - against html mail
/\ http://arc.pasp.de/
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]