[SQL][MySQLl] Erg trage SQL query (7+ seconden)

Pagina: 1
Acties:

  • Devilfish
  • Registratie: Augustus 2001
  • Laatst online: 18:53
Ik heb de volgende query:


code:
1
2
3
4
5
6
select nwsid,if(max(nredatum) IS NULL,nwsdatum,max(nredatum)) as datum,nwsnbdid,nwstitel, count(nredatum) as aantal 
from nrereacties 
right join nwsnieuws on nrereacties.nrenwsid = nwsnieuws.nwsid 
group by nwsid 
order by datum desc
LIMIT 0, 50


Dit zijn de twee gebruikte tabellen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
CREATE TABLE nrereacties (
  nreid int(11) NOT NULL auto_increment,
  nrenwsid int(11) NOT NULL default '0',
  nrenaam varchar(50) default NULL,
  nremail varchar(50) default NULL,
  nreusrid int(11) default NULL,
  nrereactie longtext,
  nredatum datetime default NULL,
  nreip varchar(16) default NULL,
  PRIMARY KEY  (nreid)
) TYPE=MyISAM;

CREATE TABLE nwsnieuws (
  nwsID int(11) NOT NULL auto_increment,
  nwsnbdID int(11) default NULL,
  nwsTitel varchar(100) default NULL,
  nwsSubTitel varchar(50) default NULL,
  nwsURL varchar(150) default NULL,
  nwsInleiding longtext,
  nwsBericht longtext,
  nwsDatum datetime default NULL,
  nwsAuteur int(11) default NULL,
  nwsVanaf tinyint(4) default NULL,
  nwsVanafDatum datetime default NULL,
  nwsTot tinyint(4) default NULL,
  nwsTotDatum datetime default NULL,
  nwsimage varchar(255) default NULL,
  nwsWsdWedstrijdnummer varchar(10) binary default NULL,
  PRIMARY KEY  (nwsID),
  KEY PRIMARY_KEY (nwsID)
) TYPE=MyISAM;


Om de query uit voeren kost het de mysql server meer dan 7 seconden... Das wel erg veel voor een pagina die straks vrij vaak gebruikt gaat worden. En de gebruikte server scripting maakt niet uit, ook met mysql-front duurt het erguh lang.

Het idee achter de pagina is dus om een overzicht te geven waarom je het aantal reacties kunt zien op een nieuwsbericht gesorteerd op de laatste reactie en indien geen reacties de datum van het nieuwsbericht. Iemand die ideeën heeft hoe deze query sneller kan?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 24-08 15:16

gorgi_19

Kruimeltjes zijn weer op :9

indexen gebruiken?
Resultaten cachen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

PRIMARY KEY (nwsID),
KEY PRIMARY_KEY (nwsID)
Twee primary keys? :)

Magoed, je bent vergeten het een en ander aan indices te plaatsen. Op nrenwsid en een op nredatum bijvoorbeeld, gebruik het EXPLAIN select .. commando om te zien waar mysql wel en geen indices gebruikt.
Daarnaast zijn de aggregates in je select list waarsch ook verantwoordelijk voor het een en ander aan traagheid.

[ Voor 3% gewijzigd door ACM op 06-02-2003 01:00 ]