/ 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
MYSQL
Fra : Jesper FA


Dato : 24-05-01 21:28

Kan man sige noget generelt om hvad der er hurtigst når man har 2 tabeller
hvor den første har et id felt, og den anden har x antal records der ref.
til den id. (1-mange relation?)

ex. tabel 1:
id , ...

tabel 2:
id , ref_id, ...

Er det så hurtigst at lave en samlet query og sortere det senere i sit
program, eller først at trække oplysningerne ud af tabel 1 og så x antal
gange på tabel 2?

Noget med select * from tabel1, tabel2 where tabel1.id=... and
tabel1.id=tabel2.refid ...

mod select * from tabel1 where id=...
og x gange select * from tabel1 where refid=...

Imod den første skulle være at de samme oplysninger fra tabel 1 kommer
tilbage mange gange og den anden at man laver mange queryes.. afhænger det
totalt af tabellerne eller kan der siges noget generelt?

--
Jesper

 
 
James Olsen (25-05-2001)
Kommentar
Fra : James Olsen


Dato : 25-05-01 20:44


"Jesper FA" <news@skydiver.dk> wrote in message
news:9ejqrm$2hu7$1@news.cybercity.dk...
> Kan man sige noget generelt om hvad der er hurtigst når man har 2 tabeller
> hvor den første har et id felt, og den anden har x antal records der ref.
> til den id. (1-mange relation?)
>
> ex. tabel 1:
> id , ...
>
> tabel 2:
> id , ref_id, ...
>
> Er det så hurtigst at lave en samlet query og sortere det senere i sit
> program, eller først at trække oplysningerne ud af tabel 1 og så x antal
> gange på tabel 2?
>
> Noget med select * from tabel1, tabel2 where tabel1.id=... and
> tabel1.id=tabel2.refid ...
>
> mod select * from tabel1 where id=...
> og x gange select * from tabel1 where refid=...

Det skal gøres sådan her :

select *
from tabel1 as t1 inner join tabel2 as t2 on (t1.id = t2.refid)
order by <hvad du nu vil sortere efter>

BTW : dette giver mig lejlighed til at lufte en kæphest - Det er uhyggeligt
sjældent en god ide at bruge select * - angiv hvad du skal bruge.

>
> Imod den første skulle være at de samme oplysninger fra tabel 1 kommer
> tilbage mange gange og den anden at man laver mange queryes.. afhænger det
> totalt af tabellerne eller kan der siges noget generelt?

Generelt skal vil det aldrig være hurtigt med mange roundtrips.

>
> --
> Jesper



Jesper FA (27-05-2001)
Kommentar
Fra : Jesper FA


Dato : 27-05-01 14:52

James Olsen wrote:

>> Noget med select * from tabel1, tabel2 where tabel1.id=... and
>> tabel1.id=tabel2.refid ...
>>
>> mod select * from tabel1 where id=...
>> og x gange select * from tabel1 where refid=...
>
> Det skal gøres sådan her :
>
> select *
> from tabel1 as t1 inner join tabel2 as t2 on (t1.id = t2.refid)
> order by <hvad du nu vil sortere efter>

Jeg havde ellers forstået det gav det samme i MySQL? Hvad er forskellen?

> BTW : dette giver mig lejlighed til at lufte en kæphest - Det er
> uhyggeligt sjældent en god ide at bruge select * - angiv hvad du skal
> bruge.

Det gør jeg også i praksis. Det andet er bare kortere at skrive her.

>> Imod den første skulle være at de samme oplysninger fra tabel 1 kommer
>> tilbage mange gange og den anden at man laver mange queryes.. afhænger
>> det totalt af tabellerne eller kan der siges noget generelt?
>
> Generelt skal vil det aldrig være hurtigt med mange roundtrips.

= dele det op i mange forespørgsler?

--
Jesper

James Olsen (27-05-2001)
Kommentar
Fra : James Olsen


Dato : 27-05-01 15:36


"Jesper FA" <news@skydiver.dk> wrote in message
news:9er0qi$2fl0$1@news.cybercity.dk...
> James Olsen wrote:
>
> >> Noget med select * from tabel1, tabel2 where tabel1.id=... and
> >> tabel1.id=tabel2.refid ...
> >>
> >> mod select * from tabel1 where id=...
> >> og x gange select * from tabel1 where refid=...
> >
> > Det skal gøres sådan her :
> >
> > select *
> > from tabel1 as t1 inner join tabel2 as t2 on (t1.id = t2.refid)
> > order by <hvad du nu vil sortere efter>
>
> Jeg havde ellers forstået det gav det samme i MySQL? Hvad er forskellen?

Forskellen er at from tabel1, tabel2.... er gammel notation og mangler
fleksibilitet i beskrivelsen af relationen (det som er on-clause). Du bør
altid bruge inner join syntaxen i ny kode og kun anvenden den anden i
forbindelse med vedligehold af eksisterende applikationer.

>
> > BTW : dette giver mig lejlighed til at lufte en kæphest - Det er
> > uhyggeligt sjældent en god ide at bruge select * - angiv hvad du skal
> > bruge.
>
> Det gør jeg også i praksis. Det andet er bare kortere at skrive her.
>
> >> Imod den første skulle være at de samme oplysninger fra tabel 1 kommer
> >> tilbage mange gange og den anden at man laver mange queryes.. afhænger
> >> det totalt af tabellerne eller kan der siges noget generelt?
> >
> > Generelt skal vil det aldrig være hurtigt med mange roundtrips.
>
> = dele det op i mange forespørgsler?

Du skal ikke dele det op i mange forespørgsler - gør så meget du kan i en
forespørgsel og lad databasens optimizer gøre arbejdet for dig.

>
> --
> Jesper



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

Månedens bedste
Årets bedste
Sidste års bedste