[MySQL] Problème de performance avec un index

Problème de performance avec un index [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 22-08-2002 à 18:34:55    

Salut :)
 
J'ai un petit soucis de performance, je voulais savoir si c'était normal ou s'il y avait quelque chose à faire. J'ai une table news, qui possède une clef primaire "id", ainsi qu'un index compound (index_news) portant sur 2 champs : le champs "auteur" et le champ "archive" (dans cet ordre là). Grâce à cet index, l'obtention du dernier enregistrement qui valide une clause WHERE sur ces 2 champs est instantanée :
 

mysql> EXPLAIN SELECT max(id) FROM news WHERE auteur = 61 AND archive = 0;
+------------------------------+
| Comment                      |
+------------------------------+
| Select tables optimized away |
+------------------------------+
1 row in set (0.00 sec)


 
Par contre, je suis très surpris de voir que MySQL est obligé de parcourir tous les enregistrements qui valident ma clause WHERE pour les compter :heink:  Ca ne demande pas énormément de temps (0.1 seconde), mais c'est déjà un dizième de seconde de trop à mon goût :
 

mysql> EXPLAIN SELECT count(*) FROM news WHERE auteur = 61 AND archive = 0;
+---------+------+----------------+-------------+---------+-------------+------+-------------------------+
| table   | type | possible_keys  | key         | key_len | ref         | rows | Extra                   |
+---------+------+----------------+-------------+---------+-------------+------+-------------------------+
| news    | ref  | index_news     | index_news  | 4       | const,const | 594  | where used; Using index |
+---------+------+----------------+-------------+---------+-------------+------+-------------------------+
1 row in set (0.00 sec)


 
C'est normal doc ? :)


Message édité par Core 666 le 22-08-2002 à 18:38:16
Reply

Marsh Posté le 22-08-2002 à 18:34:55   

Reply

Marsh Posté le 22-08-2002 à 20:02:16    

ajoute "id" à ton index (il me semble)

Reply

Marsh Posté le 22-08-2002 à 23:08:41    

Ca ne change rien ...

Reply

Marsh Posté le 23-08-2002 à 01:44:12    

il parcourt le fichier d'index pour compter, pas le fichier de data.
Tu pourras pas mieux faire à part stocker en dur dans une table le nombre de résultat

Reply

Marsh Posté le 23-08-2002 à 08:24:19    

Je trouve surprennant que cette information ne soit pas stockée directement dans les propriétés de l'index. C'est pareil sur MySQL 4 ?
 
Merci pour ta réponse joce en tout cas, c'est exactement ce que je voulais savoir :jap:

Reply

Marsh Posté le 23-08-2002 à 09:26:47    

ce qui est stocké dans la propritété de l'index, c'est le nombre total de valeur, mais pas le nombre pour chaque valeur de l'index, sinon ca prendrait une place folle.

Reply

Marsh Posté le 27-08-2002 à 08:49:23    

gizmo a écrit a écrit :

ce qui est stocké dans la propritété de l'index, c'est le nombre total de valeur, mais pas le nombre pour chaque valeur de l'index, sinon ca prendrait une place folle.



tu m'étonnes et ca mettrait des plombes a être updaté :o


---------------
Protèges carnets personnalisés & accessoires pour bébé
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed