Kod
--------------------------------------------------------------
| id | name | date | size | sex |
|------------------------------------------------------------|
| 1 | Tomasz.Jan.Mariusz.Wujek | 125842064 | 43 | M |
--------------------------------------------------------------
| id | name | date | size | sex |
|------------------------------------------------------------|
| 1 | Tomasz.Jan.Mariusz.Wujek | 125842064 | 43 | M |
--------------------------------------------------------------
Poczałkowo miałem tylko index UNIQUE na polu name. Ponieważ jednak imiona i nazwiska sa zapisywane w formie 1-wszeimie.2-gieimie.3-cieimie.Nazwisko po przecytaniu kilku artykułów z Google stwierdziłem, ze lepiej będzie nadać temu polu index FULL TEXT i przeszukiwać je poleceniem MATCH. Dotychczasowe stosowanie wildcardow % było zbyt uciążliwe.
Mam jednak pewien skrypt do przeszukiwania tej bazy ktory wykonuje sie niesamowicie dlugo. Pobiera on przykładowo ilość wszystkich kobiet o numerze buta 42. W bazie mam ok. 3,2mln ludzi wiec wykonanie tego zapytania trwa ok. 3 sec.
SELECT count(*) FROM people WHERE `size`='42' AND `sex`=F
Ponadto wybieram tez najstarsza i najmłodsza osobę z danym rozmiarem buta poleceniem:
SELECT name FROM people WHERE `size`='42' ORDER BY `date` ASC LIMIT 1 SELECT name FROM people WHERE `size`='42' ORDER BY `date` DESC LIMIT 1
Całkowity czas wykonania tego skryptu zajmuje nawet 10 sec! I tu rodzi sie moj problem: jakie indeksy nałożyć na pole size, ewentualnie sex, aby zapytanie trwało najkrócej? Z tego co wycszytałem w Internecie, indeksy są efektywne się na polach, gdzie jest mnóstwo różnych wartości. Moje pole size przyjmuje max kilkadziesiąt wartości ale za to każda ma po kilka tysięcy rekordów.
Proszę Was o pomoc jak zwiększyć wydajność mojej bazy ?