Optimisation mysql

Fermé
BA - 4 juil. 2003 à 22:04
 Karhaix - 24 août 2005 à 11:57
Bonsoir,

J'ai un petit problème de base de données :

Voici une requête sous mysql qui marche bien sur des tables de petite taille (1000 lignes), mais qui bloque tout dès qu’il s’agit d’une table de 50 000 lignes, par exemple.
J'ai une table contenant des temps, et je veux calculer des durées (différence entre deux temps successifs).

create table duréesTemp
select T1.date, round(T2.temps-T1.temps,3) as durée, T1.IP
from tabDeLogTemp T1, tabDeLogTemp T2
where T1.date=T2.date and T1.IP=T2.IP and T2.indice=T1.indice+1;

C’est logique, parce que la jointure des deux tables produit une table énorme. Mais je ne vois pas du tout comment améliorer ma requête, surtout que je n’ai que des notions minimales en SQL.

Merci d’avance.
A voir également:

1 réponse

Salut,

Je tombe par hasard sur ta question et comme ça fait deux jours que je cherche à comprendre comment on optimise mySQL et les requêtes, je me permets de répondre ce que j'ai appris :
=> exécute un EXPLAIN ta_requête dans ton mysql, il va te répondre un tableau intéressant sur les bases accédées pour répondre à ta requête. En clair, regarde la colonne "Rows", le produit de tous les nombres est le nombre de ligne que ta requête fait lire à la BD... le problème est surement là (puisqu'il est visible avec 50000 lignes et pas 1000).
=> cela va signifier qu'il va falloir créer des index bien sentis pour aider la BD à répondre à la requête. Pour ça, regarde bien la colonne "Type" et si le résultat est ALL pour une ligne, c'est qu'il peut manquer un index dans cette table (surtout si en plus, la colonne row indique un grand nombre de lignes retournées).

Au besoin, étudie ceci : http://www.nexen.net/docs/mysql/annotee/explain.php?lien=explain

Qui explique bien les résultats de EXPLAIN.

Voilà, j'espère t'avoir aidé.

Karhaix
0