/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Hvad er den korrekte metode?
Fra : PipHans


Dato : 10-09-03 16:53

Hej,

Jeg behøver lidt input :) Givet 2 tabeller:

Table1:
id Auto,int,PrimKey
table2id int
txt nvarchar50

Table2:
id Auto,int,PrimKey
order int

Dvs: Table2.order definerer hvordan table1.txt skal ordnes (rækkefølgen).
Table1.table2id indeholder så et id som mapper til Table2.id og dermed giver
table2.order. Dette layout kan desværre ikke ændres.

Hvordan vælger jeg alle poster af Table1.txt ordnet efter det tal som står i
Table2.order ??

--
Thx,
PipHans






---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.516 / Virus Database: 313 - Release Date: 01-09-2003



 
 
PipHans (10-09-2003)
Kommentar
Fra : PipHans


Dato : 10-09-03 20:11

PipHans wrote:
> Jeg behøver lidt input :) Givet 2 tabeller:

Ok lad mig spørge lidt mere specifikt:
Hvad ville I bruge:

Metode1:
SELECT table1.txt
FROM Table1 INNER JOIN Table2 ON Table1.table2id=Table2.id
ORDER BY Table2.order DESC;

Eller

Metode2:
SELECT table1.txt
FROM table1, table2
WHERE table2.id=table1.table2id
ORDER BY table2.order;

?

--
PipHans


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.516 / Virus Database: 313 - Release Date: 01-09-2003



Lars Dybdahl (10-09-2003)
Kommentar
Fra : Lars Dybdahl


Dato : 10-09-03 21:08

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


PipHans (10-09-2003)
Kommentar
Fra : PipHans


Dato : 10-09-03 21:26

Lars Dybdahl wrote:
> 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.

Det var lige præcist de tanker jeg søgte.
Tusind tak for det. Jeg vil teste mig frem til det optimale.

--
PipHans


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.516 / Virus Database: 313 - Release Date: 01-09-2003



Troels Arvin (11-09-2003)
Kommentar
Fra : Troels Arvin


Dato : 11-09-03 08:00

On Wed, 10 Sep 2003 22:26:29 +0200, PipHans wrote:

> Jeg vil teste mig frem til det optimale.

Hvis du vil have lidt teori og opsummeret empiri som baggrund:
http://www.awprofessional.com/catalog/product.asp?product_id={AE0C41D5-D0F9-4912-9D43-152ABF65C6D0}

--
Greetings from Troels Arvin, Copenhagen, Denmark


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste