Avatar billede eksperten1 Nybegynder
21. maj 2003 - 12:49 Der er 12 kommentarer og
1 løsning

Optimer query + index. HJÆÆLP

Jeg har en tabel struktur som følger herunder. Jeg har et query som joiner de 3 tabeller, men efter der kom en masse data i, så er den blevet pisse langsom (pardon my french).

Her kommer så mit Query:
select db_billeddata.eventid, db_billeddata.deltagernr, db_billeddata.fotonr, db_runnerphoto.id, db_runnerphoto.filename, db_event.eventname FROM db_billeddata, db_runnerphoto, db_event WHERE (db_billeddata.eventid = db_event.mainevent AND db_billeddata.deltagernr = "& deltagernr &" AND db_runnerphoto.eventid = db_billeddata.eventid AND db_runnerphoto.fotoid = db_billeddata.fotonr AND db_event.id = "& eventid &") ORDER BY db_billeddata.id;

Hvad er der der går galt og hvorfor er den så langsom.

I db_runnerphoto er der 62724 records, i db_dilleddata er der 53198 records og i db_event er der 12.

Please er der en venlig sjæl som kan gennemskue hvorfor det går så pisse langsomt.

#
# Table structure for table 'db_billeddata'
#

CREATE TABLE db_billeddata (
  id bigint(10) NOT NULL auto_increment,
  eventid int(3) unsigned default '0',
  deltagernr varchar(50) default '0',
  fotonr int(10) unsigned default '0',
  KEY id (id,deltagernr),
  KEY bdata (deltagernr,eventid),
  KEY bdata2 (fotonr)
) TYPE=MyISAM;



#
# Table structure for table 'db_event'
#

CREATE TABLE db_event (
  id int(8) NOT NULL auto_increment,
  eventname varchar(50) default NULL,
  showdate date default NULL,
  eventdate date default NULL,
  gotpictures tinyint(3) unsigned default '0',
  fotoagent_done tinyint(3) unsigned default '0',
  lang_id int(3) unsigned default NULL,
  pageposition tinyint(3) unsigned default '0',
  mainevent int(8) unsigned default NULL,
  KEY id (id)
) TYPE=MyISAM;



#
# Table structure for table 'db_runnerphoto'
#

CREATE TABLE db_runnerphoto (
  id bigint(20) NOT NULL auto_increment,
  eventid int(8) unsigned default NULL,
  filename varchar(50) default NULL,
  fotoid varchar(50) default NULL,
  KEY id (id),
  KEY fdata (fotoid,eventid)
) TYPE=MyISAM;
Avatar billede hobz Nybegynder
21. maj 2003 - 13:21 #1
Du JOIN'er da ingen steder?
Avatar billede eksperten1 Nybegynder
21. maj 2003 - 14:05 #2
FROM db_billeddata, db_runnerphoto, db_event WHERE

Det er jo lig med en Left Join hvis ikke jeg tager meget fejl ?
Avatar billede erikjacobsen Ekspert
21. maj 2003 - 14:15 #3
Hvordan ser din join ud?
Avatar billede eksperten1 Nybegynder
21. maj 2003 - 16:02 #4
Du er her : Eksperten : Databaser : MySQL : Optimer query + index. HJÆÆLP :


Sidste nyt fra Eksperten : Eksperten har været nede
Eksperten har været ramt af alvorlige tekniske problemer, der har betydet, at sitet har været nede hele weekenden. Det beklager vi. Nedetiden blev ekstra lang, da vores overvågningssoftware også har f... læs mere



Optimer query + index. HJÆÆLP    100 point fra eksperten1
Luk annonce  Jeg har en tabel struktur som følger herunder. Jeg har et query som joiner de 3 tabeller, men efter der kom en masse data i, så er den blevet pisse langsom (pardon my french).

Her kommer så mit Query:
select db_billeddata.eventid, db_billeddata.deltagernr, db_billeddata.fotonr, db_runnerphoto.id, db_runnerphoto.filename, db_event.eventname FROM db_billeddata, db_runnerphoto, db_event WHERE (db_billeddata.eventid = db_event.mainevent AND db_billeddata.deltagernr = "& deltagernr &" AND db_runnerphoto.eventid = db_billeddata.eventid AND db_runnerphoto.fotoid = db_billeddata.fotonr AND db_event.id = "& eventid &") ORDER BY db_billeddata.id;


Er det mig der er blevet skør i bolden, eller er det at benytte flere tabeller i mySQL ikke det samme som at Left Joine ? (FROM tabel1, tabel2, tabel3...)

mvh Mark
Avatar billede hobz Nybegynder
21. maj 2003 - 16:41 #5
Hvorfor skulle det være det samme?
Avatar billede eksperten1 Nybegynder
21. maj 2003 - 16:49 #6
Det syntes jeg bare at have forstået ud fra en mySQL bog jeg har læst (noget af). Hvordan ville det kunne optimeres, hvis vi forudsætter at det IKKE er joins. (men den henter dog data fra 3 tabeller)
Avatar billede hobz Nybegynder
21. maj 2003 - 16:51 #7
har du forsøgt dig med joins? jeg har aldrig set en query magen til din, når der er flere relationer indvolveret.
Avatar billede erikjacobsen Ekspert
21. maj 2003 - 19:38 #8
Det er en fin join - men det er ikke en left join. Dvs du har et
deltagernr og et eventid. Hvilke af dine tabeller er "store", og
hvor mange tupler er der typisk i et resultat?
Avatar billede eksperten1 Nybegynder
21. maj 2003 - 19:45 #9
erikjacobsen :) (Så er jeg i trygge hænder!)
Er det bare en JOIN, jeg har haft ændret på queryen til diverse typer joins INNER, LEFT, JOIN, og de returnerede samme tider (ca.)
De store tabeller er db_runnerphoto (62724 records), db_billeddata (53000 records) i db_event er der kun 12 records.
Nu ved jeg ikk ehvad du mener med "tupler", men hvis du mener records i resultatet er det typisk 1-10 records. (oftere 1 end 10)

mvh Mark
Avatar billede eksperten1 Nybegynder
21. maj 2003 - 20:12 #10
Kære Erik

Jeg ændrede den ene til at være en Int(10) som den anden.... Søgetiden gik fra at være ca 2,5 sek. til at være 0,12 sek.... Du er en life-saver.

Please smid et svar... og hvis du smider en post adresse er det _lige_ før at du får min første fødte med. (selvom hun er 6 år og nok ikke ville syntes det er sjovt)

mvh Mark
Avatar billede erikjacobsen Ekspert
21. maj 2003 - 20:15 #11
Hun kan lege med min Sofie, der også er 6. Det går nok.
Avatar billede eksperten1 Nybegynder
21. maj 2003 - 20:18 #12
:)) Nu gik min webserver fra at være 95-100% belastet af mysqlnt til at være 2-5% belastet !!
Avatar billede erikjacobsen Ekspert
21. maj 2003 - 20:23 #13
Jamen - sådan skal det jo være *g*
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