Avatar billede phpbegynder2004 Nybegynder
09. september 2007 - 12:38 Der er 13 kommentarer og
1 løsning

Optimering af udtryk

Hej,

Jeg har en hjemmesider, hvor man kan kommenterer billeder. På forsiden kan man se de 10 nyeste kommentarer.

Hvis man vil se den anden nyeste kommentar bruger jeg følgende query:

SELECT billedeid, dato FROM billeder_kommentarer ORDER BY autoid DESC LIMIT 1, 1

Men hvis jeg laver en EXPLAIN kan jeg se, at den skal lede samtlige 20.000 rækker igennem. Jeg har en PRIMARY key på autoid.

Hvordan kan jeg forbedre dette?
Avatar billede kjulius Novice
09. september 2007 - 15:56 #1
Måske oprette et index på autoid med DESC?
Avatar billede phpbegynder2004 Nybegynder
09. september 2007 - 17:27 #2
Hvordan gør jeg det?
Avatar billede t_daugaard Nybegynder
09. september 2007 - 19:14 #3
Umiddelbart ligner det, at du bruger MySQL - er det korrekt? (LIMIT offset,count) er vist kun MySQL der bruger den syntax.

ALTER TABLE billeder_kommentarer ADD INDEX (autoid)

Det vil lave et index med navn "autoid" på kolonnen "autoid".

Ref: http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
Avatar billede t_daugaard Nybegynder
09. september 2007 - 19:15 #4
Well, dit spørgsmål ligger i "MySQL" - det så jeg ikke lige, hehe - så ja, det er som jeg har skrevet.
Avatar billede kjulius Novice
09. september 2007 - 19:19 #5
Du kan bruge både alter table og

CREATE INDEX indexNavn ON billeder_kommentarer (autoid DESC)

(det er sådan de fleste andre databaser gør det, men MySQL har jo nogle ting de gør anderledes) :-)
Avatar billede pidgeot Nybegynder
09. september 2007 - 19:19 #6
...han har posted det i MySQL-kategorien, så det var da at håbe ;)

Nu er der bare det at en primærnøgle automatisk medfører et indeks, så det vil ikke hjælpe at lave et ekstra.

Det jeg lidt tror der er gået galt er at du har misforstået EXPLAIN'en. Den siger ikke den skal lede alle rækker igennem (kolonnen rows) - den siger bare der er så mange rækker der matcher de kriterier der er angivet i din WHERE (da der ikke er nogen, vil det være alle.

Du skulle gerne kunne se at kolonnen type viser index - det viser den ikke leder rækkerne igennem ;)
Avatar billede t_daugaard Nybegynder
09. september 2007 - 19:24 #7
pigeot: Jeg overså "Jeg har en PRIMARY key på autoid." ;)
Avatar billede kjulius Novice
09. september 2007 - 19:26 #8
Det var også derfor jeg kun kunne en mulighed, menlig at lave et index i descending order (det primære index vil være i ascending order).
Avatar billede pidgeot Nybegynder
09. september 2007 - 19:38 #9
For at citere 5.0 manualen:

An index_col_name specification can end with ASC or DESC. These keywords are allowed for future extensions for specifying ascending or descending index value storage. Currently, they are parsed but ignored; index values are always stored in ascending order.
Avatar billede kjulius Novice
09. september 2007 - 19:41 #10
Okay, det var specielt! Så er et ekstra index ikke vejen, det er klart. Jeg giver mig (frivilligt). :-)
Avatar billede phpbegynder2004 Nybegynder
17. september 2007 - 02:52 #11
Lukket
Avatar billede pidgeot Nybegynder
17. september 2007 - 08:43 #12
...og grunden til du bare lukker uden nogen form for respons er...?
Avatar billede phpbegynder2004 Nybegynder
18. september 2007 - 18:15 #13
Spørgsmålet var vel lidt og dødt og det svar der nåede at komme blev trukket tilbage igen. "Så er et ekstra index ikke vejen, det er klart."

Jeg fik ikke løst mit problem og så tager jeg pointene igen...
Avatar billede pidgeot Nybegynder
18. september 2007 - 18:19 #14
Hvis nu du læser min første kommentar, skriver jeg at jeg mener du har misforstået EXPLAIN-resultatet. Da du ikke viser det, kan jeg ganske vist ikke *vide* det, men du har jo heller ikke ligefrem gjort noget for at vise det modsatte.

Hvad svar angår, så kan jeg se du har været her ret længe, og dermed regner jeg med du godt er klar over de fleste sjældent lægger svar før de beder om det...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester