MySQL-index gör skillnad

mysql-table-index

Jag satt nyligen med ett projekt som hade en stor databas. Jag använde Symfony2 för att utvecklingen skulle gå snabbt och för att sidan skulle bli stabil och säker. Projektet var av den typen att ibland var man tvungen att göra tusentals queries per request. Såklart så var det inte perfekta queries. De såg ut ungefär så här:

SELECT * FROM Persons WHERE name=”Tobias Nyholm”;

Om man har 50 000 rader i den tabellen så kommer det gå långsamt. Varje query tog ungefär 200 millisekunder. 1000 queries tar ungefär 200 sekunder vilket är på tok för lång tid. Lösningen var dock enkel. Jag satte ett unikt index på name. Det innebär att MySQL behöver mer hårddisk för att lagra indexet. Men hårddisk är billigare än både minne och CPU så det är inga problem. Samma query med index tar 2 millisekunder. Jag tog alltså ner exekveringstiden till 1% med hjälp av ett index.

Slutsatserna man kan dra av detta är att index är bra. Även fast det kanske inte är lika extrema förbättringar som jag upplevde så kommer det bli snabbare på bekostnad av lite hårddisk. Analysera vilken typ av queries du gör ofta och se om det blir en förbättring när du lägger på ett index.



Relaterat:

  1. Sökmotorerna fuskblåser upp sitt index
  2. Unikt index med Doctrine och Symfony2
Skrivet juni 15th, 2012 av