2008-09-24 11 views

Répondre

117

Utilisez SHOW INDEX comme ceci:

SHOW INDEX FROM [tablename] 

Docs: https://dev.mysql.com/doc/refman/5.0/en/show-index.html

+28

AFFICHER L'INDEX DE 'my_table' WHERE Key_name = 'index_to_check'; – mit

+5

Mieux vaut utiliser Column_name au lieu de Key_name, de cette façon vous n'avez pas besoin de trouver le nom de l'index s'il est automatiquement ajouté sans nom. – Programista

+0

Comment vérifier plusieurs clés? – berserk

1

simplement regarder une disposition de tables de la cli. vous feriez

desc matable

ou

Afficher la table mytable

32

Essayez:

SELECT * FROM information_schema.statistics 
    WHERE table_schema = [DATABASE NAME] 
    AND table_name = [TABLE NAME] AND column_name = [COLUMN NAME] 

Il vous dira i f il y a un index de n'importe quelle sorte sur une certaine colonne sans avoir besoin de connaître le nom donné à l'index. Il travaillera également dans une procédure stockée (par opposition à afficher l'index)

9
SHOW KEYS FROM tablename WHERE Key_name='unique key name' 

vous pouvez trouver s'il existe une clé unique dans la table

6
show index from table_name where Column_name='column_name'; 
-2

Vous ne pouvez pas exécuter un indice d'exposition spécifique requête car il va lancer une erreur si un index n'existe pas. Par conséquent, vous devez saisir tous les index dans un tableau et les parcourir si vous voulez éviter les erreurs SQL.

Voici comment je le fais. Je récupère tous les index de la table (dans ce cas, leads) puis, dans une boucle foreach, vérifie si le nom de la colonne (dans ce cas, province) existe ou non.

$this->name = 'province'; 

$stm = $this->db->prepare('show index from `leads`'); 
$stm->execute(); 
$res = $stm->fetchAll(); 
$index_exists = false; 

foreach ($res as $r) { 
    if ($r['Column_name'] == $this->name) { 
     $index_exists = true; 
    } 
} 

De cette façon, vous pouvez vraiment affiner les attributs d'index. Faire un print_r de $res afin de voir ce que vous pouvez travailler avec.

-1

vous pouvez utiliser l'instruction SQL suivante pour vérifier la colonne donnée sur la table a été indexé ou non

select a.table_schema, a.table_name, a.column_name, index_name 
from information_schema.columns a 
join information_schema.tables b on a.table_schema = b.table_schema and 
            a.table_name = b.table_name and 
            b.table_type = 'BASE TABLE' 
left join (
select  concat(x.name, '/', y.name) full_path_schema, y.name index_name 
FROM information_schema.INNODB_SYS_TABLES as x 
JOIN information_schema.INNODB_SYS_INDEXES as y on x.TABLE_ID = y.TABLE_ID 
WHERE x.name = 'your_schema' 
and y.name = 'your_column') d on concat(a.table_schema, '/', a.table_name, '/', a.column_name) = d.full_path_schema 
where a.table_schema = 'your_schema' 
and  a.column_name = 'your_column' 
order by a.table_schema, a.table_name; 

depuis les jointures sont contre INNODB_SYS_ *, de sorte que les indices de match ne sont venus des tables InnoDB seulement

0

Utilisez l'instruction suivante: SHOW INDEX dE your_table

Et puis vérifier le résultat pour les champs: la ligne [ "Table"], rangée [ "Key_name"]

Assurez-vous d'écrire correctement "Nom_clé"

Questions connexes