Question

Considérez le tableau suivant MySQL:

CREATE TABLE `log`
(
    `what` enum('add', 'edit', 'remove') CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
    `with` int(10) unsigned NOT NULL,

    KEY `with_what` (`with`,`what`)
) ENGINE=InnoDB;

INSERT INTO `log` (`what`, `with`) VALUES
    ('add', 1),
    ('edit', 1),
    ('add', 2),
    ('remove', 2);

Si je comprends bien, l'indice de with_what doit avoir 2 entrées uniques sur son premier niveau de with et 3 (EDIT: 4) entrées uniques dans what « subindex ». Mais les rapports MySQL 4 entrées uniques pour chaque niveau. En d'autres termes, le nombre d'éléments uniques pour chaque niveau est toujours égal au nombre de lignes dans le tableau de log.

EDIT:. Il est correct pour le « second niveau » d'avoir le nombre d'entrées uniques égal au nombre total d'enregistrements, mais pas d'accord pour le niveau haut

EDIT2: Ont remarqué si le nombre de a bits occupé par la colonne de with changé, par exemple pour int (11) et retour à int (10), CARDINALITY puis commencer à travailler comme prévu. Même affichage EXPLAIN SELECT COUNT(DISTINCT 'with') FROM log valeur adéquate pour rows.

Est-ce un bug, une fonction ou mon incompréhension?

Était-ce utile?

La solution

SHOW INDEXES affiche les statistiques qui sont approximatives.

Ces statistiques sont recueillies automatiquement les requêtes à la table sont effectuées, et en plus, vous pouvez forcer les rassembler manuellement en émettant ANALYZE TABLE log.

La valeur de la colonne est cardinalité exacte et ne peut changer entre les appels à ANALYZE, même si la table sous-jacente ne change pas.

Autres conseils

Votre compréhension est erronée. clé de plusieurs colonnes est créée à partir de plusieurs valeurs, et non pour plusieurs colonnes. rapports MySQL 4 entrées uniques parce que vous avez entré 4 paires uniques d'entrées.

Vous avez décrit des index séparés pour ces colonnes, donc au lieu

KEY `with_what` (`with`,`what`)

il devrait être

KEY `with` (`with`),
KEY `what` (`what`)

Et il devrait fonctionner comme vous le voulais.

vous devriez penser à une « colonne multi » index comme un « indice concaténé », ce qui signifie les colonnes individuelles sont concaténés dans l'index. Autrement dit, il y a une entrée d'index pour chaque ligne, et que l'entrée contient toutes les colonnes indexées.

Jetez un oeil à mon livre électronique pour obtenir l'image complète comment fonctionnent les index: http: // utilisation- The-Index-Luke.com/

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