Question

Cette question est liée à celui-ci .

J'ai un table avec la structure suivante:

CREATE TABLE  mydatabase.page (
  pageid int(10) unsigned NOT NULL auto_increment,
  sourceid int(10) unsigned default NULL,
  number int(10) unsigned default NULL,
  data mediumtext,
  processed int(10) unsigned default NULL,
  PRIMARY KEY  (pageid),
  KEY sourceid (sourceid)
) ENGINE=MyISAM AUTO_INCREMENT=9768 DEFAULT CHARSET=latin1;

données colonne contient du texte dont la taille est de 80 Ko - 200 Ko par enregistrement. La taille totale des données stockées dans les données colonne est d'environ 1,5 Go.

L'exécution de cette requête prend 0,08 secondes:

select pageid from page

Mais l'exécution de cette requête prend autour de 130,0 secondes:

select sourceid from page

Comme vous le voyez, j'ai un index primaire sur page.pageid et un index sur page.sourceid. Donc, si la deuxième requête prendra que longue?

Edit # 1

EXPLIQUEZ retourné

id select_type table type  possible_keys key      key_len ref rows Extra
1  SIMPLE      page  index               sourceid 5           9767 Using index

Je suis désolé, mais le profilage ne fonctionne pas ... MySQL (la 4.1.22) ne reconnaissait pas la requête SHOW PROFIL.

SHOW INDEX retour

Table Non_unique Key_name  Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
page  0          PRIMARY   1            pageid      A         9767                             BTREE 
page  1          sourceid  1            sourceid    A         3255                        YES  BTREE 
Était-ce utile?

La solution

Avez-vous essayé d'imposer l'utilisation de l'indice? Comme:

SELECT sourceid FROM page USE INDEX (sourceid_index)

Comme commentaires sgehrig, vérifiez avec EXPLAIN si l'indice est utilisé? Et partager le résultat?

EXPLAIN select sourceid from page

Il pourrait également aider à partager les definiton des indices:

SHOW INDEX FROM page

Autres conseils

Quelle différence sont vos champs SourceID? Si vous avez seulement quelques valeurs différentes SourceID par rapport au nombre de lignes, vous pouvez essayer d'augmenter la taille de l'index.

MySQL 4.1.22 est assez vieux (02 Novembre 2006) Je pense qu'il ne supporte pas la notion de pour les clés secondaires couvrant les index . Montre que la EXPLAIN requête utilise effectivement l'index, donc je suppose que le délai supplémentaire est nécessaire pour lire toutes les lignes de résultat (au lieu de simplement retourner le contenu de l'index lorsque vous utilisez couvrant les index ) à extraire la colonne sourceid.

Avez-vous la possibilité de vérifier la requête sur une version du serveur MySQL plus récent?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top