Massive joins
viktoras didziulis
viktoras at ekoinf.net
Fri Nov 16 09:46:36 EST 2007
The query needed to left join 3 tables (with 10 000 (species), 30 000
(donor regions) and 200 (region definitions) records.) on the forth with
40 000 records (species introduction events) and filter the result list
of regions using constraints (WHERE...) on 1 or 20 fields. Using LEFT
JOINs in this case was very slow - up to 10 minutes. I rewrote joins (as
described in "SQL" by Martin Gruber) in a form like this:
SELECT DISTINCT sir.country, sir.start_year, sir.end_year
FROM species_in_region sir WHERE sir.idspecies IN(
SELECT sp.idspecies FROM species sp WHERE sp.ordo IN(1,10,23,15)
)
AND sir.id_sp_region IN(
SELECT da.id_sp_region FROM donor_areas da WHERE da.regionid
IN(2,3,4,115,23,21)
)
AND /etc..../
ORDER BY sir.end_year
Implemented in this form it takes less than a second. SQLite is a very
small database engine and likely (???) does not perform any query
optimizations internally. In comparison with MySQL, which does optimise
joins, the same unoptimised query with joins in MySQL database server is
executed just a little (~0.2 sec.) slower than manually-optimised query
in SQLite.
Viktoras
Ruslan Zasukhin wrote:
> Can you explain this?
>
> JOIN on RAM db/tables SqlLite do so slowly ???
> why? What reason?
>
>
More information about the use-livecode
mailing list