Dit artikel bespreekt indexen en hoe u ze kunt gebruiken om de queryprestaties van de MySQL-database te verbeteren.
Databaseprestaties en indexen
Database-indexen in MySQL stellen u in staat de prestaties van SELECT . te versnellen vragen opvragen. Voor kleine tabellen helpt een index niet veel. Als u echter tabellen heeft met een grote hoeveelheid gegevens, kunnen indexen de prestaties aanzienlijk verbeteren.
De volgende gedragingen zijn allemaal indicaties dat tabellen baat kunnen hebben bij het toevoegen van indexen:
- Uw site laadt erg langzaam of helemaal niet.
- Een applicatie kan geen verbinding maken met zijn database.
- Van databasequery's wordt een back-up gemaakt.
Als u een van deze problemen ondervindt, moet u uw databasequery's analyseren en overwegen om indexen toe te voegen.
Als je een beheerde VPS of beheerde dedicated server hebt, kan een grotere sorteerbuffer ook helpen naast het toevoegen van indexen. Open een ticket op het klantenportaal op https://my.a2hosting.com om deze optie met onze Guru Crew te bespreken.Databasequery's analyseren
Om te bepalen welke tabellen baat kunnen hebben bij het gebruik van indexen, moet u uw databasequery's analyseren. De EXPLAIN SELECT verklaring helpt u daarbij. Volg deze stappen om databasequery's te analyseren:
- Log in op uw account met SSH.
- Typ bij de opdrachtprompt de volgende opdracht en vervang gebruikersnaam met de gebruikersnaam van uw A2 Hosting-account en database met de naam van de database:
mysql -u username -p database
- Bij de prompt Enter Password typt u uw wachtwoord. De prompt mysql> verschijnt.
-
Typ de volgende SQL-opdracht:
EXPLAIN SELECT * FROM table_name WHERE conditions \G
Als u uw eigen applicatiecode schrijft, kent u de SELECT . al verklaringen die u gebruikt om gegevens op te halen. Als u een toepassing van derden gebruikt, zoals WordPress of PrestaShop, moet u mogelijk de broncode of databaselogboeken onderzoeken om de exacte SELECT te bepalen. verklaringen die worden gebruikt om gegevens op te halen. -
Uitvoer van de EXPLAIN SELECT statement laat zien hoe de MySQL-query-optimizer de query zal uitvoeren. Beschouw bijvoorbeeld de volgende uitvoer:
mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: employees type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 142 Extra: Using where 1 row in set (0.00 sec)
In dit voorbeeld uitvoer:
- De possible_keys en sleutel waarden zijn beide NULL , wat aangeeft dat MySQL geen index heeft die het voor deze zoekopdracht kan gebruiken.
- De rijen waarde geeft aan dat MySQL 142 rijen zal lezen voor deze query. Als de tabel in totaal 142 rijen bevat, betekent dit dat MySQL elke rij moet onderzoeken om de resultatenset te genereren. Dit kan behoorlijk wat tijd kosten voor een grote tafel.
Aan de andere kant, als we een index zouden maken met de naam index_name voor de achternaam kolom, kan MySQL de volgende uitvoer genereren voor dezelfde zoekopdracht:
mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: employees type: range possible_keys: index_name key: index_name key_len: 22 ref: NULL rows: 17 Extra: Using where; Using index 1 row in set (0.00 sec)
Zoals je kunt zien, zijn de possible_keys en sleutel waarden geven aan dat MySQL een index heeft gevonden die kan worden gebruikt om de query te optimaliseren. Bovendien leest MySQL slechts 17 rijen om de resultatenset te genereren, in plaats van alle 142 rijen. (Dit betekent dat de tabel 17 rijen heeft waar de achternaam begint met "T".) Ten slotte de Extra waarde geeft ook aan dat MySQL een index zal gebruiken voor de zoekopdracht.
Indexen toevoegen, verwijderen en bekijken in een tabel
Nadat u uw databasequery's hebt geanalyseerd en hebt bepaald waar de prestatieknelpunten zich bevinden, bent u klaar om indexen toe te voegen. Volg hiervoor deze stappen:
- Log in op uw account met SSH.
- Typ bij de opdrachtprompt de volgende opdracht en vervang gebruikersnaam met de gebruikersnaam van uw A2 Hosting-account en database met de naam van de database:
mysql -u username -p database
- Bij de prompt Enter Password typt u uw wachtwoord. De prompt mysql> verschijnt.
-
Typ de volgende SQL-opdracht om een index aan een tabel toe te voegen. Vervang tabelnaam met de naam van de tabel, index_name met de naam van de nieuwe index (wat alles kan zijn wat je wilt), en table_column met de naam van de tabelkolom waarvoor u de index wilt toevoegen:
ALTER TABLE table_name ADD INDEX index_name (table_column);
Hoewel indexen de prestaties kunnen verbeteren, kunnen indexen ook de prestaties negatief beïnvloeden als er te veel van zijn. Dit komt omdat hoe meer indexen een tabel heeft, hoe meer werk MySQL moet doen om ze up-to-date te houden. De truc is om de juiste balans te vinden tussen voldoende indexen om de prestaties te verbeteren, maar niet zo veel dat ze een negatieve invloed hebben op de prestaties. -
Typ de volgende SQL-opdracht om een index uit een tabel te verwijderen. Vervang tabelnaam door de naam van de tabel, en vervang index_name met de naam van de index die u wilt verwijderen:
ALTER TABLE table_name DROP INDEX index_name;
-
Typ de volgende SQL-opdracht om alle indexen voor een tabel te bekijken. Vervang tabelnaam met de naam van de tafel:
SHOW INDEX FROM table_name \G
Nadat u een index heeft gemaakt, moet u de EXPLAIN SELECT . gebruiken statement opnieuw om te zien hoe query's worden beïnvloed. Bovendien moet u de databaseprestaties blijven controleren om te zien of er verbeteringen zijn. Mogelijk moet u een reeks tests uitvoeren om het optimale aantal indexen voor uw database te vinden.
Meer informatie
- Ga voor meer informatie over MySQL-optimalisatie en indexen naar https://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html.
- Voor meer informatie over de EXPLAIN verklaring, gaat u naar https://dev.mysql.com/doc/refman/5.5/en/explain.html.