2011-11-05 5 views
0

J'ai un problème avec la perfomance de mes requêtes mysql. J'ai une très grande tableMauvaises performances de MySQL pour une sélection assez simple

create table query(
    id Integer, 
    session Integer, 
    time Integer, 
    name Integer, 
    region Integer); 

Volume des données - 2 gb .I've fait index sur "nom" - 7 Go.

Mes requêtes ressemblent:

select count(id) from query where name=somevalue; 

je ne voudrais pas ajouter de nouvelles données, et moi standard "my-huge.cnf". Pourtant, je passe environ 4-5 secondes par requête, je vais faire environ 9-10 * 45000 requêtes. Quelles options dois-je changer pour augmenter la vitesse, si mon ordinateur a 2 Go de mémoire.

+1

Plus de RAM est ce dont vous avez probablement besoin. – ceejayoz

+2

Vos données sont de 2 Go mais votre index sur une colonne de la table est de 7 Go? Cela n'a pas de sens ... –

+0

Quel moteur (inno, myisam etc) utilisez-vous pour la table? Combien de requêtes parallèles avez-vous dans le même temps? –

Répondre

2

Un compte (*) peut s'exécuter légèrement plus rapidement.

select count(*) as rowcount from query where name=somevalue; 

Vous pouvez également envisager de mettre en cache les comptes dans une table distincte et d'en effectuer une requête.

+0

Merci beaucoup, ça m'a vraiment aidé. Mais je prévois de faire des requêtes plus compliquées dans le futur, donc je devrais augmenter d'une certaine façon les tampons. Mais vous venez de me sauver 3-4 jours de traitement. – epahomov

2

Si vous ne modifiez jamais les données, vous devez envisager d'exécuter les requêtes pour tous les noms possibles (SELECT DISTINCT(name) FROM query) une fois, puis de stocker la valeur COUNT() dans un cache. Pour cela, vous pouvez créer une table cache avec name et total en tant que colonnes et la remplir avec les résultats de l'exécution de SELECT name, COUNT(*) AS total FROM query WHERE name = 'name' pour chaque nom.

Vous aurez alors simplement SELECT total FROM cache WHERE name = 'name', ce qui sera très rapide.

+0

Cela aiderait, si le problème était d'obtenir des informations sur les comptes plusieurs fois. Je veux augmenter la vitesse à la première collecte d'informations. Comme le chemin pour que je veux utiliser des tampons plus gros. – epahomov

Questions connexes