/ 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
DB hastighed
Fra : WebLock


Dato : 28-08-01 20:47

Jeg sidder og leger med noget CD-liste og har i første omgang lavet som
beskrevet i 2'eren. Blev dog enig med mig selv, at dette ikke virker særlig
overskueligt, så jeg lavede den om så den virker som beskrevet i 1'eren,
også i håb om at der kom lidt mere hastighed i listen. Dette bevirkede dog
at listen blev pi**e langsom. Gik fra 2 sekunder til 7 sekunder for at liste
31 titler med ca. 31*120 indholds poster.
Jeg har også prøvet med arrey, simpelthen at læse hele databasen ind i
hukommelsen en gang for alle, i stedet for at den kontakter databasen for
hver enkel post, men det gik endnu langsommere.
Er der nogen der har nogle andre gode optimerings tips ?


1) Tabel1 indeholder alle CD-titler og Tabel2 indeholder alt indhold og et
"ref CD" felt, så man kan se hvilket indhold der hører til hvilke CD'er

2) Tabel1 indeholder alle CD-titler og hver CD-titel har sin egen tabel med
indholdet


Ps: Skal lige siges at jeg har prøvet både med MS ACCESS og MySQL med præcis
samme resultat



 
 
Niels Andersen (28-08-2001)
Kommentar
Fra : Niels Andersen


Dato : 28-08-01 21:19

"WebLock" <REMOVEskummel@gadefejer.dk> wrote in message
news:3b8bf511$0$1712$edfadb0f@dspool01.news.tele.dk...
> 1) Tabel1 indeholder alle CD-titler og Tabel2 indeholder alt indhold og et
> "ref CD" felt, så man kan se hvilket indhold der hører til hvilke CD'er

Hmm... Hvordan gør du så med MySQL for at se dem alle?
SELECT * FROM tabel1, tabel2 WHERE tabel1.cd=tabel2.refcd

Husk at lave indexes på de felter, som du bruger i "where".

--
Mvh.

Niels Andersen



WebLock (28-08-2001)
Kommentar
Fra : WebLock


Dato : 28-08-01 21:55


"Niels Andersen" <niels-usenet@myplace.dk> wrote in message
news:L0Ti7.26350$Ay1.694737@news000.worldonline.dk...
> "WebLock" <REMOVEskummel@gadefejer.dk> wrote in message
> news:3b8bf511$0$1712$edfadb0f@dspool01.news.tele.dk...
> > 1) Tabel1 indeholder alle CD-titler og Tabel2 indeholder alt indhold og
et
> > "ref CD" felt, så man kan se hvilket indhold der hører til hvilke CD'er
>
> Hmm... Hvordan gør du så med MySQL for at se dem alle?
> SELECT * FROM tabel1, tabel2 WHERE tabel1.cd=tabel2.refcd
>
> Husk at lave indexes på de felter, som du bruger i "where".
>
> --
> Mvh.
>
> Niels Andersen

Har først denne streng:
SELECT * FROM cdtitler WHERE kategori=" & kategori & "

Den bruger jeg til at hente CDtitlerne ud med, alt efter hvilken type
(kategori) der bliver spurgt efter (f.eks. spil/film/apps)

Har så en streng til der henter alt indhold ud der svarer til ID'et på den
CDtitel der blev hentet i foregående streng:
SELECT * FROM indhold WHERE refcd=" & rs("Id") & "





Niels Andersen (29-08-2001)
Kommentar
Fra : Niels Andersen


Dato : 29-08-01 06:41

"WebLock" <REMOVEskummel@gadefejer.dk> wrote in message
news:3b8c0512$0$1653$edfadb0f@dspool01.news.tele.dk...
> Har først denne streng:
> SELECT * FROM cdtitler WHERE kategori=" & kategori & "

Jeg gætter på at det der
" & kategori & "
er noget dit program/script erstatter med et kategorinummer?
Det samme med nedenstående
" & rs("Id") & "
Right? Jeg synes i hvert fald ikke det give den helt store mening med SQL...
:)

> Har så en streng til der henter alt indhold ud der svarer til ID'et på den
> CDtitel der blev hentet i foregående streng:
> SELECT * FROM indhold WHERE refcd=" & rs("Id") & "

Dvs. du laver en query for hver CD. Jeg tror det er bedre at hente det hele
i én query.
Måske sådan her:

SELECT * FROM cdtitler,indhold WHERE cdtitler.cd=indhold.refcd AND
kategori=<kategori>

Nu erstatter du vel "*" med en liste over de felter du skal bruge, ik'?

Og har du lavet indexes på de felter, du nævner i WHERE? (her cd, refcd og
kategori)

--
Mvh

Niels Andersen



WebLock (29-08-2001)
Kommentar
Fra : WebLock


Dato : 29-08-01 08:52


"Niels Andersen" <niels-usenet@myplace.dk> wrote in message
news:pf%i7.26499$Ay1.721589@news000.worldonline.dk...
> "WebLock" <REMOVEskummel@gadefejer.dk> wrote in message
> news:3b8c0512$0$1653$edfadb0f@dspool01.news.tele.dk...
> > Har først denne streng:
> > SELECT * FROM cdtitler WHERE kategori=" & kategori & "
>
> Jeg gætter på at det der
> " & kategori & "
> er noget dit program/script erstatter med et kategorinummer?
> Det samme med nedenstående
> " & rs("Id") & "
> Right? Jeg synes i hvert fald ikke det give den helt store mening med
SQL...
> :)
>
> > Har så en streng til der henter alt indhold ud der svarer til ID'et på
den
> > CDtitel der blev hentet i foregående streng:
> > SELECT * FROM indhold WHERE refcd=" & rs("Id") & "
>
> Dvs. du laver en query for hver CD. Jeg tror det er bedre at hente det
hele
> i én query.
> Måske sådan her:
>
> SELECT * FROM cdtitler,indhold WHERE cdtitler.cd=indhold.refcd AND
> kategori=<kategori>
>
> Nu erstatter du vel "*" med en liste over de felter du skal bruge, ik'?
>
> Og har du lavet indexes på de felter, du nævner i WHERE? (her cd, refcd og
> kategori)

Hmm ok, sådan har jeg aldrig set en sql streng være. Hvordan bestemmer man
så, om den streng skal tage CDtitlen eller indholdet ud ? Har lidt svært ved
at gennemskue den...

Webber



Niels Andersen (29-08-2001)
Kommentar
Fra : Niels Andersen


Dato : 29-08-01 09:57

"WebLock" <REMOVEskummel@gadefejer.dk> wrote in message
news:3b8c9f27$0$7961$edfadb0f@dspool01.news.tele.dk...
> > SELECT * FROM cdtitler,indhold WHERE cdtitler.cd=indhold.refcd AND
> > kategori=<kategori>
> >
> > Nu erstatter du vel "*" med en liste over de felter du skal bruge, ik'?
> >
> > Og har du lavet indexes på de felter, du nævner i WHERE? (her cd, refcd
og
> > kategori)
>
> Hmm ok, sådan har jeg aldrig set en sql streng være. Hvordan bestemmer man
> så, om den streng skal tage CDtitlen eller indholdet ud ? Har lidt svært
ved
> at gennemskue den...

Svært at forklare, når ikke jeg ved hvordan dine tabeller ser ud. Men lad os
sige, at de ser sådan her ud:

cdtitler:
cd, titel, kunstner, kategori

indhold
cdref, track, name

Altså, "cd" og "cdref" er et nummer el. lign. der identificerer den enkelte
CD.
"track" er nummeret på CD'en (1, 2, 3 osv...)
"name" er navnet på tracket.

Hvis du så siger
SELECT * FROM cdtitler,indhold WHERE cd=cdref WHERE kategori=<kategori>
Så får du lige så mange rækker, som der er tracks. Hver række vil indeholde
cd, titel, kunstner, kategori, cdref, track og name.
Så er det jo bare lidt træls, at du dels får både cd og cdref (som jo er
ens), men især at "titel" og "kunstner" er gentaget for hvert track.

Så kan du gøre sådan her:
Først en liste over CDer: SELECT cd, titel, kunstner FROM cdtitler WHERE
kategori=<kategori>
Og så en liste over tracks:
SELECT cd, track, name FROM cdtitler, indhold WHERE cd=cdref AND
kategori=<kategori>

Så har du klaret det hele med to queries, og du har ikke fået mere, end du
skal bruge.

--
Mvh.

Niels Andersen



WebLock (29-08-2001)
Kommentar
Fra : WebLock


Dato : 29-08-01 11:32

--- kom til at sende det med email i stedet :) ---

Ok - tror jeg vil prøve at lege med det. Tak fordi du tog dig tid til at
lave et så fyldestgørende svar !

Mvh:
Webber




Jonas Delfs (01-09-2001)
Kommentar
Fra : Jonas Delfs


Dato : 01-09-01 16:12

"Niels Andersen" <niels-usenet@myplace.dk> skrev i en meddelelse
news:pf%i7.26499$Ay1.721589@news000.worldonline.dk...

> > SELECT * FROM cdtitler WHERE kategori=" & kategori & "
>
> Jeg gætter på at det der
> " & kategori & "
> er noget dit program/script erstatter med et kategorinummer?

Jeg troede du havde rodet med ASP? :)
Ikke at jeg har, men det der er helt sikkert ASP.

--
Mvh./Best Regards
Jonas Delfs, http://delfs.dk



Niels Andersen (01-09-2001)
Kommentar
Fra : Niels Andersen


Dato : 01-09-01 21:36

"Jonas Delfs" <jonas@nospam.delfs.dk> wrote in message
news:9mqtv0$cs2$1@sunsite.dk...
> > > SELECT * FROM cdtitler WHERE kategori=" & kategori & "
> > Jeg gætter på at det der
> > " & kategori & "
> > er noget dit program/script erstatter med et kategorinummer?
>
> Jeg troede du havde rodet med ASP? :)
> Ikke at jeg har, men det der er helt sikkert ASP.

Ja, det er efter al sandsynlighed en stump ASP. Men klippet ud på den måde
ser det da enormt dumt ud, og man skal de lige tænke sig om en ekstra gang
før det giver mening. :)

Så vidt jeg husker er "&" det tegn man bruger i Visual Basic til at
sammensætte strenge med. Og Visual Basic skulle være det man "normalt" laver
ASP med. Og dermed er der en god chance for, at det er ASP.

Men det, jeg egentlig ville frem til er, at dette:

SELECT * FROM cdtitler WHERE kategori=" & kategori & "

ikke giver den store mening, det skulle nærmere skrives sådan:

sql = "SELECT * FROM cdtitler WHERE kategori=" & kategori & " ORDER BY id"

eller fx. sådan:

SELECT * FROM cdtitler WHERE kategori=<kategori>

--
Mvh.

Niels Andersen



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

Månedens bedste
Årets bedste
Sidste års bedste