-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
slet.dette.thorkil.og.dette@pip.dknet.dk (Thorkil Olesen) writes:
> Nis Jorgensen <nis@superlativ.dk> wrote:
>
>> Hvad hvis du omformulerer til
>>
>> select * from afles a1 NATURAL JOIN
>> (select max(dato) as dato, sted from afles a2
>> where dato <= '2005-06-01'
>> ) as md
>> where sted = 'VM200';
[...]
> Jeg har overvejet andre muligheder, og egentligt kommet frem til en
> endnu simplere:
>
> select * from afles
> where sted = 'VM200' and dato <= '2005-06-01'
> order by dato desc
> limit 1;
Øh... var det bare _det_, du prøvede på?
Det var det der med
træthed...
> Opsummering af udførelsestider med PostgreSQL 8.0.0 under Linux 2.4 på
> en Pentium II 400 MHz:
>
> Mit oprindelige query: 429.934 ms
> Nis' formulering: 4.975 ms
> Mit oprindelige med 'sted' angivet to gange: 3.776 ms
> Det sidste med 'limit' og uden sub-query: 0.383 ms
>
> Det koster altså meget tid at bruge et sub-query...
Subqueries ender ofte som joins på den ene eller anden måde, og i
forhold til selects på enkelte tabeller, er joins temmeligt
dyre. Joins har det også med at stige ret voldsomt i køretid, når man
joiner flere større tabeller uden at kunne begrænse søgemængden
effektivt vha. indekser.
Når du laver tidsmålinger som disse, er det også en god idé, at du
forsøger at forstå, hvad databasen faktisk gør for at udføre din
forespørgsel. Dette er blot så du med tiden kan oparbejde en intuition
om, hvordan den slags virker. Dette kan du få rigtigt god hjælp til
med kommandoen EXPLAIN, som giver dig en såkaldt query plan, hvilket
er databasens 'opskrift' på, hvordan din forespørgsel bliver besvaret.
> (Jeg begynder helt at ku' li' SQL.)
Ja, det er sgu helt sjovt at lege med databaser. Jeg er blevet så
smittet, at jeg ikke sjældent dagdrømmer om databasedesigns.
Men
nu er jeg også så alvorligt ramt, at jeg har skrevet speciale inden
for området, og mit arbejde er meget databaseorienteret. Hvis ikke du
passer på, kan du ende lige så galt som mig.
Martin
- --
Homepage:
http://www.cs.auc.dk/~factotum/
GPG public key:
http://www.cs.auc.dk/~factotum/gpgkey.txt
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Using Mailcrypt+GnuPG <
http://www.gnupg.org>
iEYEARECAAYFAkKg1cYACgkQYu1fMmOQldX7AACginU6SbxmsHv6yxi7VA/kZZuq
3fcAoLFhahEgVq1RPRg1PqvNKkdniHVq
=RmuY
-----END PGP SIGNATURE-----