PipHans wrote:
> Metode1:
> FROM Table1 INNER JOIN Table2 ON Table1.table2id=Table2.id
> Metode2:
> FROM table1, table2
> WHERE table2.id=table1.table2id
Det kommer helt an på databasen. Jeg har oplevet nogle, der ikke supporterer
"inner join", og nogle, der ikke supporterede den anden metode. På nogle er
den ene hurtigst, på nogle er den anden hurtigst, og på nogle er de ens.
Jeg opererer mest inden for MySQL, PostgreSQL, Firebird, Interbase,
Microsoft SQL Server, Microsoft Access og DBISAM, og jeg plejer at
foretrække inner join syntaksen.
På et tidspunkt lavede jeg et system, der skulle køre på bl.a. Microsoft
Access 2.0, Oracle 7 og Microsoft SQL Server 6.5, og såvidt jeg husker var
Oracle hurtigst ved metode 2 og MSSQL server hurtigst ved metode 1. Da der
samtidigt var gigantisk forskel på, om man skrev "select * from", hvilket
Access var lynhurtig til og de andre var sløve til, eller om man skrev
"select feltnavn, feltnavn from", hvilket Access var umådeligt sløv til og
de andre meget hurtige til, skrev jeg simpelthen et modul til konstruktion
af SQL statements, så programmet altid fik optimale SQL statements, uanset
hvilken database server jeg tilsluttede.
Jeg husker, at de optimerede SQL statements til Microsoft SQL Server var
gigantiske, intet mindre. Et enkelt SQL statement, der joinede 2-4
tabeller, kunne sagtens være 5-20 kbyte stort, til gengæld var
afviklingsperformance ekstrem god. Det galdt bl.a. om at undgå "*" hvor man
kunne, og såvidt jeg husker var nestede SQL statements også væsentlig
hurtigere end joins.
Det kunne f.eks. se sådan ud:
SELECT table1.txt
FROM Table1
where Table1.table2id in (select Table2.id from Table2)
(dette kræver selvflg. at "order by" går på table1).
Men prøv dig frem og se, hvad der afvikles hurtigst. Hvis du bruger
Firebird, så kig i øvrigt i manualen efter "PLAN" nøgleordet, som du kan
skrive som en del af dit SQL statement. Dette nøgleord kan udvirke
underværker mht. performance på mange SQL statements.
Hilsen,
Lars.
--
Freelance programmør
|