Hallo,
Ik heb sinds kort een probleem met mijn webapplicatie. Bij mijn huidige host (one.com) werkt het allemaal super snel, maar ik wil die website verplaatsen naar mijn reseller hosting account (versio.nl), zodat ik alles mooi bij elkaar heb. Alleen heb ik een probleem met de MySQL performance van mijn reseller account. Ik ben al 3 dagen bezig het op te lossen, maar ik weet het echt niet meer. Ik heb de oorzaak kunnen vast stellen van het performance verlies, maar een goede oplossing heb ik niet.
Het gaat om de volgende 2 MySQL tabellen:
De volgende SQL query is het probleem:Code:CREATE TABLE `artist` ( `id` int(11) NOT NULL auto_increment, `name` varchar(250) NOT NULL, PRIMARY KEY (`id`), KEY `name` (`name`), ) ENGINE=MyISAM AUTO_INCREMENT=29119 DEFAULT CHARSET=utf8 AUTO_INCREMENT=29119 ; CREATE TABLE `song` ( `id` int(11) NOT NULL auto_increment, `artistid` int(11) NOT NULL, `title` varchar(300) NOT NULL, `text` longtext NOT NULL, `youtubeID` varchar(11) NOT NULL, `views` int(11) NOT NULL, `reports` int(11) NOT NULL default '0', `movieChecked` enum('true','false') NOT NULL default 'false', `lyricsChecked` enum('true','false') NOT NULL, PRIMARY KEY (`id`), KEY `artistid` (`artistid`), KEY `title` (`title`), ) ENGINE=MyISAM AUTO_INCREMENT=484694 DEFAULT CHARSET=utf8 AUTO_INCREMENT=484694 ; Artist bestaat uit ongeveer 28.000 rijen en song uit ongeveer 450.000 rijen.
Nu ben ik erachter gekomen dat het verlies komt door de ORDER BY, als ik hem weg haal, duurt de query ongeveer 0,08 seconden. Met de ORDER BY doet MySQL er ongeveer 2 minuten over.Code:SELECT a.name AS artist, s.id AS id, s.title AS title, s.views AS views, s.movieChecked AS checked FROM song s, artist a WHERE a.id = s.artistid ORDER BY a.name ASC, s.title ASC LIMIT 0 , 50
Nu ben ik ook al met indexen bezig geweest, maar zonder enig resultaat.
Wie o wie kan me helpen?
- Enorm langzame SQL Query
-
14-03-2009, 10:08 #1
- Berichten
- 190
- Lid sinds
- 16 Jaar
Enorm langzame SQL Query
Laatst aangepast door Wouter Carabain : 14-03-2009 om 10:13
-
-
14-03-2009, 10:09 #2
- Berichten
- 83
- Lid sinds
- 17 Jaar
Heb je er al een EXPLAIN query op losgelaten?
-
14-03-2009, 10:17 #3
- Berichten
- 190
- Lid sinds
- 16 Jaar
EXPLAIN geeft het volgende:
Code:id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE a ALL PRIMARY NULL NULL NULL 28774 Using temporary; Using filesort 1 SIMPLE s ref artistid artistid 4 zingmee.a.id 16
-
14-03-2009, 10:37 #4
- Berichten
- 1.670
- Lid sinds
- 16 Jaar
Het probleem is simpel te verklaren: Mysql gaat eerst alle rijen ordenen en dat kost erg veel tijd. De oplossing is dat je deze query niet iedere keer gaat uitvoeren maar dat je gebruik gaat maken van caching. Ik kan dit waarschijnlijk wel tegen betaling voor je doen, laat het me maar weten.
-
14-03-2009, 10:51 #5
- Berichten
- 1.344
- Lid sinds
- 18 Jaar
Je ordert ook 2 waardes, Als je nou s.title ASC eens weg haalt en gewoon 1 waarde ordert.
-
14-03-2009, 10:54 #6
- Berichten
- 83
- Lid sinds
- 17 Jaar
Wat je ziet bij EXPLAIN is dat je geen key gebruikt bij table a. Ka je eens een EXPLAIN geven zonder de ORDER BY?
-
14-03-2009, 11:00 #7
- Berichten
- 190
- Lid sinds
- 16 Jaar
De EXPLAIN zonder de ORDER BY:
Code:id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE a ALL PRIMARY NULL NULL NULL 28774 1 SIMPLE s ref artistid artistid 4 zingmee.a.id 16
-
14-03-2009, 11:17 #8
- Berichten
- 218
- Lid sinds
- 18 Jaar
Probeer anders eens om de tabel te optimaliseren (gewoon in phpmyadmin), misschien maakt het wat uit?
-
14-03-2009, 11:30 #9
- Berichten
- 1.670
- Lid sinds
- 16 Jaar
Origineel gepost door Timo Maas
Probeer anders eens om de tabel te optimaliseren (gewoon in phpmyadmin), misschien maakt het wat uit?
-
14-03-2009, 11:36 #10
- Berichten
- 190
- Lid sinds
- 16 Jaar
Helaas, OPTIMIZE TABLE en ANALYZE table halen niets uit. Naja, niet wat snelheidswinst betreft.
Caching zou inderdaad een oplossing kunnen zijn. Maar wat ik vreemd vind is dat het bij mijn huidige host (One.com) wel allemaal super snel werkt en dat ZONDER enige indexen (op de PRIMARY index na).
Zou dat aan de configuratie van hun servers kunnen liggen?
-
14-03-2009, 11:42 #11
- Berichten
- 1.670
- Lid sinds
- 16 Jaar
Origineel gepost door Wouter Carabain
Helaas, OPTIMIZE TABLE en ANALYZE table halen niets uit. Naja, niet wat snelheidswinst betreft.
Caching zou inderdaad een oplossing kunnen zijn. Maar wat ik vreemd vind is dat het bij mijn huidige host (One.com) wel allemaal super snel werkt en dat ZONDER enige indexen (op de PRIMARY index na).
Zou dat aan de configuratie van hun servers kunnen liggen?
Ik heb het al bij meer klanten gezien die ook gekozen hebben voor caching en het bleek dat in sommige stukjes script gewoon een slechte query zit en dat deze vervangen moet worden of gecached indien het essentieel is en een andere oplossing niet mogelijk is.
-
14-03-2009, 12:33 #12
- Berichten
- 108
- Lid sinds
- 18 Jaar
@ Wouter Carabain
Ik heb ook enkele sites bij Versio ondergebracht, en ben erg tevreden over hun service. Ik zou dit probleem ook eens bij hun aankaarten.
-
14-03-2009, 12:37 #13
- Berichten
- 1.670
- Lid sinds
- 16 Jaar
Origineel gepost door Peter R
@ Wouter Carabain
Ik heb ook enkele sites bij Versio ondergebracht, en ben erg tevreden over hun service. Ik zou dit probleem ook eens bij hun aankaarten.
Hun servers zijn echt niet geschikt voor complexe queries als deze...
-
14-03-2009, 12:39 #14
- Berichten
- 802
- Lid sinds
- 18 Jaar
Aan de explain te zien is 2 minuten voor deze helemaal niet zo complexe query idioot lang, zelfs als de indexen niet worden gebruikt. Is er niet iets anders aan de hand? Kun je tijdens het uitvoeren van die query de MySQL processlist bekijken?
-
14-03-2009, 12:42 #15
- Berichten
- 1.670
- Lid sinds
- 16 Jaar
Origineel gepost door Maarten vL
Aan de explain te zien is 2 minuten voor deze helemaal niet zo complexe query idioot lang, zelfs als de indexen niet worden gebruikt. Is er niet iets anders aan de hand? Kun je tijdens het uitvoeren van die query de MySQL processlist bekijken?
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic