J’ai eu besoin de Google à plusieurs resockets, alors je partage mon Q / A.
Utilisez SHOW INDEX
comme ceci:
SHOW INDEX FROM [tablename]
Docs: https://dev.mysql.com/doc/refman/5.0/en/show-index.html
Essayer:
SELECT * FROM information_schema.statistics WHERE table_schema = [DATABASE NAME] AND table_name = [TABLE NAME] AND column_name = [COLUMN NAME]
Il vous indiquera s’il existe un index quelconque sur une colonne donnée sans qu’il soit nécessaire de connaître le nom donné à l’index. Il fonctionnera également dans une procédure stockée (par opposition à afficher l’index)
SHOW KEYS FROM tablename WHERE Key_name='unique key name'
vous pouvez trouver s’il existe une clé unique dans la table
show index from table_name where Column_name='column_name';
Il suffit de regarder une mise en page des tables du cli. vous feriez
desc mytable
ou
show table mytable
Utilisez l’instruction suivante: SHOW INDEX FROM your_table
Et puis vérifiez le résultat pour les champs: row [“Table”], row [“Key_name”]
Assurez-vous d’écrire correctement “Key_name”
vous pouvez utiliser l’instruction SQL suivante pour vérifier que la colonne indiquée sur la table a été indexée 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;
comme les jointures sont contre INNODB_SYS_ *, les index de correspondance proviennent uniquement des tables INNODB uniquement
Vous ne pouvez pas exécuter une requête show index spécifique, car une erreur est générée si un index n’existe pas. Par conséquent, vous devez saisir tous les index dans un tableau et les parcourir si vous souhaitez éviter les erreurs SQL.
Heres comment je le fais. J’attrape tous les index de la table (dans ce cas, les leads
) et puis, dans une boucle foreach, vérifiez si le nom de la colonne (dans ce cas, la 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 réduire les atsortingbuts de l’index. Faites un print_r
de $res
afin de voir avec quoi vous pouvez travailler.