Problème de performance avec un index [MySQL] - SQL/NoSQL - Programmation
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
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
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.
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é
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 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