sql >> Database >  >> RDS >> Mysql

Mysql-prestaties op een tabel met 6 miljoen rijen

Wat u zeker wilt weten, is dat de query ALLEEN de index zal gebruiken, dus zorg ervoor dat de index alle velden omvat die u selecteert. Omdat het een bereikquery is, moet u ook de venid als eerste in de index hebben, omdat deze als een constante wordt opgevraagd. Ik zou daarom zo maken en indexeren:

ALTER TABLE events ADD INDEX indexNameHere (venid, date, time);

Met deze index staat alle informatie die nodig is om de query te voltooien in de index. Dit betekent dat, hopelijk, de opslagengine in staat is om de informatie op te halen zonder daadwerkelijk in de tabel zelf te zoeken. Het is echter mogelijk dat MyISAM dit niet kan doen, omdat het de gegevens niet opslaat in de bladen van de indexen, dus het kan zijn dat u niet de gewenste snelheidsverhoging krijgt. Als dat het geval is, probeer dan een kopie van de tabel te maken en gebruik de InnoDB-engine op de kopie. Herhaal daar dezelfde stappen en kijk of je een significante snelheidsverhoging krijgt. InnoDB doet sla de veldwaarden op in de indexbladen en laat dekkende indexen toe.

Hopelijk ziet u nu het volgende wanneer u de vraag uitlegt:

mysql> EXPLAIN SELECT date, time FROM events WHERE venid='47975' AND date>='2009-07-11' ORDER BY date;

id  select_type table  type  possible_keys        key       [..]  Extra
1   SIMPLE   events range date_idx, indexNameHere indexNameHere   Using index, Using where


  1. Waarschuwing:de stap na de installatie is niet succesvol voltooid, bij het installeren van mysql met brew in Mac OS High Sierra

  2. Proactieve SQL Server-statuscontroles, deel 4:ERRORLOG

  3. Doorzoek alle velden in alle tabellen voor een specifieke waarde (Oracle)

  4. Aangepaste snelkoppelingen maken in SQL Server Management Studio (SSMS) - SQL Server / TSQL-zelfstudie, deel 10