Mysql
 sql >> Base de données >  >> RDS >> Mysql

Performances MySQL sur une table de 6 millions de lignes

Ce que vous voulez vous assurer, c'est que la requête utilisera UNIQUEMENT l'index, alors assurez-vous que l'index couvre tous les champs que vous sélectionnez. De plus, comme il s'agit d'une requête de plage impliquée, vous devez d'abord avoir le venid dans l'index, car il est interrogé en tant que constante. Je créerais donc et indexerais comme ceci :

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

Avec cet index, toutes les informations nécessaires pour compléter la requête se trouvent dans l'index. Cela signifie que, espérons-le, le moteur de stockage est capable de récupérer les informations sans réellement chercher à l'intérieur de la table elle-même. Cependant, MyISAM peut ne pas être en mesure de le faire, car il ne stocke pas les données dans les feuilles des index, vous risquez donc de ne pas obtenir l'augmentation de vitesse souhaitée. Si tel est le cas, essayez de créer une copie de la table et utilisez le moteur InnoDB sur la copie. Répétez les mêmes étapes là-bas et voyez si vous obtenez une augmentation significative de la vitesse. InnoDB fait stocker les valeurs de champ dans les feuilles d'index et permettre de couvrir les index.

Maintenant, j'espère que vous verrez ce qui suit lorsque vous expliquerez la requête :

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