Internetbureau Holder

To SQL_CALC_FOUND_ROWS or not to SQL_CALC_FOUND_ROWS

Chiel Wester do 14 jan 10

MySQL kent een handige functie die SQL_CALC_FOUND_ROWS heet. Hiermee berekent MySQL het totaal aantal gevonden rijen voor een Query, ook wanneer er gebruik gemaakt word van een limit en een offset. Hierdoor heb je geen aparte count query meer nodig.

mysql> select SQL_CALC_FOUND_ROWS * from users ORDER BY name LIMIT 1;
mysql> SELECT FOUND_ROWS();

=> 312343;

Het gebruik hiervan heeft echter een (dure) prijs. Wanneer er gebruik gemaakt word van SQL_CALC_FOUND_ROWS, maakt MySQL niet langer gebruik van de indexen die op een tabel liggen.

In bovenstaand voorbeeld zal dan ook geen gebruik gemaakt worden van de index die op de kolom name ligt, terwijl dit bij dezelfde query zonder SQL_CALC_FOUND_ROWS wél het geval is waardoor de query vele malen sneller zal zijn.

In mijn geval duurde de query mét SQL_CALC_FOUND_ROWS meer dan 20 seconden (!) terwijl de query zonder niet meer dan 100 milliseconden in beslag neemt. De aparte count query die uitgevoerd moet worden om het aantal rijen te achterhalen maakt wél gebruik van de juiste index waardoor ook deze query een fractie in beslag neemt.

Bovenstaand verhaal is ook terug te lezen in dit artikel.
(Direct even bookmarken, die site.)

Gepost in hor |  0 reacties

Plaats je reactie





Welcome to Holland On Rails

This weblog is the official Ruby techblog from the guys at Holder, a Ruby development company. Holder is also the company behind the RubyAndRails Europe Conference in Amsterdam.

Recente Jobs


Bekijk alle jobs »»

Gereedschapskist

Onmisbare tools voor
iedere developer!
Ruby On Rails
Framework voor de web 2.0 developer. Eindelijk vooruitgang!
TextMate
Editor for true pro's
Typ, tab, top :-)
Nee, niet voor Win.
Made On A Mac
En nou is het over met die saaie grijze Windows bak van je!

Auteurs op deze site

Chris Obdam

'Less is more' evangelist, past dit ook dagelijks toe op zijn tandenborstel.

Chiel Wester

Snelheidswonder op Ruby wielen. Leuk om mee te pair-programmen ;-) Recommend Me

Stephan Kaag

Het eerste Rails coreteam- member uit Nederland? Rails evangelist van het eerste uur.

Paul Engel

Én Rails programmeren én interfaces designen? Je zou hem superman kunnen noemen..

Dax Huiberts

Official Zip-Programmer, skinny code is helemaal zijn ding. Haalt meer code weg dan dat er bij komt.

Freek Monteban

Het nieuwste telg uit het Holland on Rails nest! Hij doet niets anders meer!

Johan Vermeulen

De stylesheet-koning uit de kop van Noord-Holland!