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

Améliorer les performances de MySQL sur une requête à exécution unique avec un grand ensemble de données

Mon intuition est qu'avec un int non signé et un varchar 40 (en particulier le varchar !), Vous avez maintenant une ÉNORME clé primaire et cela rend votre fichier d'index trop volumineux pour tenir dans la RAM dont vous disposez pour Innodb_buffer_pool. Cela obligerait InnoDB à s'appuyer sur le disque pour permuter les pages d'index lors de la recherche, ce qui représente BEAUCOUP de recherches sur le disque et peu de travail sur le processeur.

Une chose que j'ai faite pour un problème similaire est d'utiliser quelque chose entre une clé vraiment naturelle et une clé de substitution. Nous prendrions les 2 champs qui sont réellement uniques (dont l'un était également un varchar) et dans la couche d'application, nous créerions un hachage MD5 à largeur fixe et utiliserions CELA comme clé. Oui, cela signifie plus de travail pour l'application, mais cela crée un fichier d'index beaucoup plus petit puisque vous n'utilisez plus un champ de longueur arbitraire.

OU, vous pouvez simplement utiliser un serveur avec des tonnes de RAM et voir si cela permet à l'index de tenir dans la mémoire, mais j'aime toujours faire du "jeter du matériel dessus" un dernier recours :)