Avatar billede Slettet bruger
06. september 2004 - 16:50 Der er 3 kommentarer og
1 løsning

Optimering af forespørgsler

Hej Drenge!

Jeg har idag modtaget en mail fra vores udbyder ang. vores debatforum (Phorum), den lyder sådan:

Hej Kim,

Vi oplever i øjeblikket at jeres debatforum overbelaster vores mySQL server....

Det er queries til tabellen: Debatforum
Den har 70004 records / fylder 62 MB

De SQL queries som går igen er:

SELECT id, thread, author, subject
FROM Debatforum
WHERE approved = 'Y'
ORDER BY datestamp DESC
LIMIT


SELECT max( thread ) AS thread
FROM Debatforum
WHERE approved = 'Y'


De må kunne optimeres ! Evt. med nogle indexes eller noget...

---

Det er sgu nogle år siden jeg sidst roddet med MySQL og PHP, kunne nogen evt. give en hånd med, jeg dumper lige de to tabeller der ligger ryg til debatforummet:

#
# Table structure for table `Debatforum`
#

CREATE TABLE Debatforum (
  id bigint(45) unsigned NOT NULL default '0',
  datestamp datetime NOT NULL default '0000-00-00 00:00:00',
  thread int(11) NOT NULL default '0',
  parent int(11) NOT NULL default '0',
  author char(37) NOT NULL default '',
  subject char(255) NOT NULL default '',
  email char(200) NOT NULL default '',
  attachment char(64) NOT NULL default '',
  host char(50) NOT NULL default '',
  email_reply char(1) NOT NULL default 'N',
  approved char(1) NOT NULL default 'N',
  msgid char(100) NOT NULL default '',
  PRIMARY KEY  (id),
  KEY author (author),
  KEY datestamp (datestamp),
  KEY subject (subject),
  KEY thread (thread),
  KEY parent (parent),
  KEY approved (approved),
  KEY msgid (msgid),
  KEY host (host),
  KEY host_2 (host)
) TYPE=MyISAM;


og


#
# Table structure for table `Debatforum_bodies`
#

CREATE TABLE Debatforum_bodies (
  id bigint(25) unsigned NOT NULL auto_increment,
  body text NOT NULL,
  thread int(11) NOT NULL default '0',
  PRIMARY KEY  (id),
  KEY thread (thread)
) TYPE=MyISAM;


De to tabeller fylder tilsammen godt 80 Mb...

Mvh.

Kim
Avatar billede fsconsult.dk Nybegynder
06. september 2004 - 17:00 #1
Prøv med:

CREATE INDEX Debatforum_datestamp_ix on Debatforum (approved,datestamp DESC);
CREATE INDEX Debatforum_thread_ix on Debatforum (approved,thread);
Avatar billede Slettet bruger
06. september 2004 - 17:44 #2
Hej FSC!

Ok, når jeg har oprettede INDEX'ene er det så nok eller hvordan?

Kim
Avatar billede fsconsult.dk Nybegynder
06. september 2004 - 18:46 #3
prøv at sætte EXPLAIN foran de queries der skal optimeres for at teste om de benytter de nye index.

f.eks:

EXPLAIN SELECT id, thread, author, subject
FROM Debatforum
WHERE approved = 'Y'
ORDER BY datestamp DESC
Avatar billede Slettet bruger
06. september 2004 - 18:54 #4
Hej FSR!

Vil jeg prøve, allerede nu kan jeg fortælle at den er blevet MANGE GANGE hurtigere :)

Der er cirka 70.000 indlæg på debatforummet.

Mvh.

Kim
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