Determinar si el índice de la tabla MySQL existe antes de crear

El proceso de migración automatizada de la base de datos de nuestro sistema implica ejecutar scripts .sql que contienen nuevas definiciones de tabla y sus índices correspondientes.

Necesito la capacidad de crear estas tablas e índices solo si aún no existen. Las tablas se solucionan utilizando IF NOT EXISTS pero no existe dicha sintaxis al crear índices.

Intenté escribir un procedimiento almacenado, que se muestra a continuación, pero presumiblemente esto falla, ya que no puede seleccionar de una declaración show.

DELIMITER $
DROP PROCEDURE IF EXISTS csi_add_index $
CREATE PROCEDURE csi_add_index(in theTable varchar(128), in theIndexName varchar(128), in theIndexColumns varchar(128)  )
BEGIN
 IF(((SELECT COUNT(*) FROM (SHOW KEYS FROM theTable WHERE key_name = theIndexName)) tableInfo = 0) THEN
   SET @s = CONCAT('CREATE INDEX ' , theIndexName , ' ON ' , theTable, '(', theIndexColumns, ')');
   PREPARE stmt FROM @s;
   EXECUTE stmt;
 END IF;
END $

He considerado soltar y recrear, pero el proceso, tal como existe, supone que no encontrará errores, por lo tanto, quiero comprobar primero la existencia.

¿Hay otra forma de recuperar los índices de una tabla para verificar si ya existe un índice antes de crearlo o alguien puede sugerir un mejor enfoque para administrar esto?

EDITAR: Tenga en cuenta que este es un procedimiento automatizado, no intervención humana.

Respuestas a la pregunta(7)

Su respuesta a la pregunta