2010-07-08 8 views
1

Si je définis un index MySQL sur deux champs, comment puis-je savoir quels sont les deux groupes (en utilisant les commandes MySQL).Afficher les index dans la table MySQL

Voici un exemple de table:

mysql> DESCRIBE lansuite_wiki_versions; 
+-----------+-----------------------+------+-----+-------------------+-----------------------------+ 
| Field  | Type     | Null | Key | Default   | Extra      | 
+-----------+-----------------------+------+-----+-------------------+-----------------------------+ 
| versionid | int(11)    | NO | PRI | 0     |        | 
| postid | int(11)    | NO | PRI | 0     |        | 
| date  | timestamp    | NO |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
| userid | mediumint(8) unsigned | NO | MUL | 0     |        | 
| text  | text     | NO | MUL | NULL    |        | 
| test1  | int(11)    | NO | MUL | NULL    |        | 
| test2  | int(11)    | NO |  | NULL    |        | 
+-----------+-----------------------+------+-----+-------------------+-----------------------------+ 
7 rows in set (0.00 sec) 

Ce tableau a des index définis sur:

  • versionid + postID
  • userid
  • test1 + test2
  • texte

Je le sais, parce que je les ai assignés et les voir dans phpmyadmin. Mais je veux le voir aussi dans ma demande. Je suis donc trouvé cette commande mySQL:

mysql> SHOW INDEX FROM lansuite_wiki_versions; 
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| Table     | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | 
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
| lansuite_wiki_versions |   0 | PRIMARY |   1 | versionid | A   |  NULL |  NULL | NULL |  | BTREE  |   | 
| lansuite_wiki_versions |   0 | PRIMARY |   2 | postid  | A   |   144 |  NULL | NULL |  | BTREE  |   | 
| lansuite_wiki_versions |   1 | userid |   1 | userid  | A   |   4 |  NULL | NULL |  | BTREE  |   | 
| lansuite_wiki_versions |   1 | test  |   1 | test1  | A   |   1 |  NULL | NULL |  | BTREE  |   | 
| lansuite_wiki_versions |   1 | test  |   2 | test2  | A   |   1 |  NULL | NULL |  | BTREE  |   | 
| lansuite_wiki_versions |   1 | text  |   1 | text  | NULL  |   1 |  NULL | NULL |  | FULLTEXT |   | 
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
6 rows in set (0.00 sec) 

Mais comment puis-je voir versionid + postID est connecté? Je peux voir Seq_in_index compter. Alors, est-ce que je peux me fier à un index commun entre versionid et postid, juste parce qu'ils sont alignés les uns à côté des autres dans cette sortie et que Seq_in_index compte? Ou existe-t-il une autre commande, qui me montre quels index sont définis?

Répondre

3

Le nom de la clé sera unique pour chaque index; les colonnes qui font partie du même index auront le même nom dans cette table.

seq_in_index vous donne la séquence.

Cela peut sembler plus logique si vous consultez la table INFORMATION_SCHEMA contenant des index (consultez la documentation). Je suppose que vous écrivez un outil pour inspecter par programmation la structure de la base de données.

Si vous êtes un humain et que vous voulez voir la structure de la table, je recommande SHOW CREATE TABLE à la place.

+0

Merci ... Comment ne pas avoir vu la colonne Nom_clé .. – JochenJung

+0

Quelle serait la requête complète pour la version lisible par l'homme;/* Je ne parviens pas à me connecter à ma base de données distante à partir de phpMyAdmin, bien que j'aie suivi les instructions pour le faire * / –

1

La colonne du nom de clé indique l'index en cours de description. La séquence dans l'index indique l'ordre dans lequel les colonnes se trouvent, dans cet index. Ainsi, dans votre exemple, vous avez une PRIMARY KEY sur versionid et postid, un ID utilisateur non unique sur userid, un test de clé non unique sur test1 et test2, etc.

Questions connexes