Avatar billede peukon Nybegynder
18. februar 2003 - 10:36 Der er 6 kommentarer og
1 løsning

15 sekunder om et udtræk!!!

Jeg har et problem med et tabel udtræk hvor jeg bruger JOIN. Det handler om en tabel med prodcenter og en med kategorier (som producenterne tilhøre).

Producent tabellen ser således ud:

CREATE TABLE BUTIKKER (
  Brugernavn varchar(80) NOT NULL default '',
  Password varchar(8) NOT NULL default '',
  Navn varchar(40) NOT NULL default '',
  Adresse varchar(50) NOT NULL default '',
  Postnr varchar(10) NOT NULL default '',
  City varchar(30) NOT NULL default '',
  Land varchar(30) NOT NULL default 'Denmark',
  Tlf varchar(20) NOT NULL default '',
  Fax varchar(20) NOT NULL default '',
  Email varchar(40) NOT NULL default '',
  www varchar(40) NOT NULL default '',
  Profil text NOT NULL,
  Logo varchar(40) NOT NULL default 'Nej',
  Facade varchar(40) NOT NULL default 'Nej',
  Fed varchar(5) NOT NULL default 'Nej',
  Rabat int(3) NOT NULL default '0',
  Hits int(10) NOT NULL default '0',
  Medlemsdage int(4) NOT NULL default '0',
  Brand varchar(40) NOT NULL default 'Nej',
  Udsalg varchar(10) NOT NULL default 'Nej',
  Amt varchar(50) NOT NULL default '',
  Huskeord varchar(50) NOT NULL default '',
  Kundenr int(10) NOT NULL auto_increment,
  PRIMARY KEY  (Kundenr)
)

...og indeholder 918 poster

Jeg har ligeledes en tabel med kategorier der ser således ud:

CREATE TABLE KATAGORI (
  ID int(11) NOT NULL auto_increment,
  Brugernavn varchar(50) NOT NULL default '',
  Katagori varchar(100) NOT NULL default '',
  PRIMARY KEY  (ID),
  FULLTEXT KEY kategori_index (Katagori)
)

... og indeholder 12419 poster

Via en dropdown menu er det muligt at sortere disse efter kategori og det gør jeg med følgende query:

mysql_query("SELECT * FROM PRODUCENTER LEFT JOIN KATAGORI USING (Brugernavn) WHERE Katagori = '$valgt_kategori' ORDER BY Navn",$db);

Problemet er så (endelig kommer vi til det ;)) at det tager en krig for at få denne query vidst (helt op til 15 sekunder). Hvad skal jeg gøre?!?... "Help me Obi-Wan Kenobi, your my only hope"...
Avatar billede jfl Nybegynder
18. februar 2003 - 10:40 #1
Du skal have index på brugernavn og kategori. Index har stor betydning!
Avatar billede peukon Nybegynder
18. februar 2003 - 10:50 #2
Har prøvet og gøre følgende:

...Huskeord varchar(50) NOT NULL default '',
  Kundenr int(10) NOT NULL auto_increment,
  PRIMARY KEY  (Kundenr),
  KEY bruger_index (Brugernavn)
  }


...Katagori varchar(100) NOT NULL default '',
  PRIMARY KEY  (ID),
  KEY kategori_index (Katagori)
  )


...men desværre uden nogen effekt mærkbar effekt =(
Avatar billede jfl Nybegynder
18. februar 2003 - 10:50 #3
Du skal også have index på Navn da du sorterer på den.
Index for Brugernavn skal laves for begge tabeller.

http://www.mysql.com/doc/en/MySQL_indexes.html
Avatar billede jfl Nybegynder
18. februar 2003 - 10:53 #4
Indexet for Brugernavn skal helst hedde det samme i begge tabeller, og gerne være unique, hvis Brugernavn kun kan have 1 række i tabellen.
Avatar billede jfl Nybegynder
18. februar 2003 - 10:55 #5
Lær evt. at bruge EXPLAIN SELECT * FROM PRODUCENTER LEFT JOIN KATAGORI USING (Brugernavn) WHERE Katagori = '$valgt_kategori' ORDER BY Navn
http://www.mysql.com/doc/en/EXPLAIN.html
Avatar billede peukon Nybegynder
18. februar 2003 - 10:57 #6
Det virker nu... Jubiiiii!!!!! = )...

Thnak you, thank you...
Avatar billede jfl Nybegynder
18. februar 2003 - 11:00 #7
Det er en fornøjelse at hjælpe i et så godt dokumenteret spørgsmål :)
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