Outre l'indexation qui a déjà été suggéré, vous pouvez regarder aussi dans les tables de partitionnement si elles sont grandes.
Partitioning in MySQL
Il est difficile d'être précis ici, parce que nous avons des informations très limitées, mais l'indexation correcte avec partitionnement peut aller un long chemin. Indexer correctement peut être un sujet long, mais dans un sens très général, vous voudrez indexer les colonnes que vous interrogez.
Par exemple, supposons que vous avez une table d'employés, et vous avez vos colonnes habituelles de SSN, FNAME, LNAME. En plus de ces colonnes, nous dirons que vous avez également 10 colonnes supplémentaires dans le tableau.
Maintenant vous avez cette requête:
SELECT FNAME, LNAME FROM EMPLOYEES WHERE SSN = 'blah';
Ignorant le fait que le SSN pourrait probablement être la clé primaire ici et peut-être déjà un index unique sur elle, vous probablement voir un avantage de performance en créant un autre index composite contenant les colonnes (SSN, FNAME, LNAME). La raison en est que la base de données peut satisfaire cette requête en regardant simplement l'index composite car il contient toutes les valeurs nécessaires dans un espace trié et compact. (c'est-à-dire moins d'E/S). Même si l'index sur SSN est seulement une meilleure méthode d'accès pour faire un balayage de table complet, la base de données doit toujours lire les blocs de données pour l'index (E/S), trouver les valeurs qui contiendront des pointeurs vers les enregistrements nécessaire pour satisfaire la requête, il faudra alors lire différents blocs de données (lire: plus d'E/S aléatoires) afin de récupérer les valeurs réelles pour fname et lname.
Ceci est évidemment très simplifié, mais l'utilisation d'index de cette manière peut réduire considérablement les E/S et augmenter les performances de votre base de données.
D'autres liens peuvent vous être utiles:
Peut-être que le problème est la requête ... Peut-être que c'est le matériel du serveur qui ne suffit pas, je pense que nous avons besoin de plus d'informations . –
Existe-t-il un moyen d'améliorer les requêtes de sélection simples? Les requêtes sont littéralement "SELECT * FROM table WHERE colonne =" quelque chose "". Du point de vue matériel, peut-être, mais le serveur ne fonctionne pas à sa capacité maximale, donc je ne sais pas si c'est le cas, bien que le matériel soit bien meilleur :-D – sam
Utilisez EXPLAIN sur vos requêtes pour savoir comment elles sont exécutées par votre base de données serveur. Avec cette information, vous pouvez créer les index dont vous avez besoin. 10M disques n'est pas beaucoup, ne devrait pas donner un sérieux problème. –