web-dev-qa-db-fra.com

Comment vérifier si un index existe sur un champ de table dans MySQL?

J'ai eu besoin de Google ceci quelques fois, donc je partage mon Q/A.

91
Sean

Utilisez SHOW INDEX comme suit:

SHOW INDEX FROM [tablename]

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

123
Sean

Essayer:

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

Il vous dira s'il existe un index quelconque sur une colonne donnée sans qu'il soit nécessaire de connaître le nom attribué à l'index. Cela fonctionnera également dans une procédure stockée (par opposition à show index)

33
Stéphan Champagne
SHOW KEYS FROM  tablename WHERE Key_name='unique key name'

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

9
pulock
show index from table_name where Column_name='column_name';
6
Somil

Utilisez l'instruction suivante: SHOW INDEX FROM your_table

Et puis vérifiez le résultat pour les champs: ligne ["Table"], ligne ["Nom_clé"]

Assurez-vous d'écrire "Key_name" correctement 

2
GK10

il suffit de regarder une disposition des tables de la cli. vous feriez 

desc mytable

ou

montrer la table

1
J.J.

Si vous avez besoin de la fonctionnalité si un index pour une colonne existe (ici tout d’abord en ordre) comme fonction de base de données, vous pouvez utiliser/adopter ce code . dans un index multi-colonnes, supprimez simplement la partie "AND SEQ_IN_INDEX = 1".

DELIMITER $$
CREATE FUNCTION `fct_check_if_index_for_column_exists_at_first_place`(
    `IN_SCHEMA` VARCHAR(255),
    `IN_TABLE` VARCHAR(255),
    `IN_COLUMN` VARCHAR(255)
)
RETURNS tinyint(4)
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'Check if index exists at first place in sequence for a given column in a given table in a given schema. Returns -1 if schema does not exist. Returns -2 if table does not exist. Returns -3 if column does not exist. If index exists in first place it returns 1, otherwise 0.'
BEGIN

-- Check if index exists at first place in sequence for a given column in a given table in a given schema. 
-- Returns -1 if schema does not exist. 
-- Returns -2 if table does not exist. 
-- Returns -3 if column does not exist. 
-- If the index exists in first place it returns 1, otherwise 0.
-- Example call: SELECT fct_check_if_index_for_column_exists_at_first_place('schema_name', 'table_name', 'index_name');

-- check if schema exists
SELECT 
    COUNT(*) INTO @COUNT_EXISTS
FROM 
    INFORMATION_SCHEMA.SCHEMATA
WHERE 
    SCHEMA_NAME = IN_SCHEMA
;

IF @COUNT_EXISTS = 0 THEN
    RETURN -1;
END IF;


-- check if table exists
SELECT 
    COUNT(*) INTO @COUNT_EXISTS
FROM 
    INFORMATION_SCHEMA.TABLES
WHERE 
    TABLE_SCHEMA = IN_SCHEMA
AND TABLE_NAME = IN_TABLE
;

IF @COUNT_EXISTS = 0 THEN
    RETURN -2;
END IF;


-- check if column exists
SELECT 
    COUNT(*) INTO @COUNT_EXISTS
FROM 
    INFORMATION_SCHEMA.COLUMNS
WHERE 
    TABLE_SCHEMA = IN_SCHEMA
AND TABLE_NAME = IN_TABLE
AND COLUMN_NAME = IN_COLUMN
;

IF @COUNT_EXISTS = 0 THEN
    RETURN -3;
END IF;

-- check if index exists at first place in sequence
SELECT 
    COUNT(*) INTO @COUNT_EXISTS
FROM 
    information_schema.statistics 
WHERE 
    TABLE_SCHEMA = IN_SCHEMA
AND TABLE_NAME = IN_TABLE AND COLUMN_NAME = IN_COLUMN
AND SEQ_IN_INDEX = 1;


IF @COUNT_EXISTS > 0 THEN
    RETURN 1;
ELSE
    RETURN 0;
END IF;


END$$
DELIMITER ;
0
Hubbe73