Esa es una diferencia de rendimiento sorprendentemente grande, pero puedo pensar en algunas cosas que pueden estar contribuyendo.
MyISAM ha sido históricamente visto como más rápido que InnoDB, pero para versiones recientes de InnoDB, eso es cierto para un conjunto mucho más pequeño de casos de uso. MyISAM suele ser más rápido para escaneos de tablas de solo lectura. En la mayoría de los casos de uso, normalmente encuentro que InnoDB es más rápido. A menudo muchas veces más rápido. Los bloqueos de mesa son un toque de difuntos para MyISAM en la mayor parte de mi uso de MySQL.
MyISAM almacena en caché los índices en su almacenamiento intermedio de claves. Tal vez haya configurado el búfer clave demasiado pequeño para que pueda almacenar en caché el índice para su tabla algo grande.
MyISAM depende del sistema operativo para almacenar en caché los datos de la tabla de los archivos .MYD en la memoria caché de disco del sistema operativo. Si el sistema operativo se está quedando sin memoria, comenzará a descargar su caché de disco. Eso podría obligarlo a seguir leyendo desde el disco.
InnoDB almacena en caché los índices y los datos en su propio búfer de memoria. Puede decirle al sistema operativo que no use también su caché de disco si establece innodb_flush_method en O_DIRECT, aunque esto no es compatible con OS X.
InnoDB suele almacenar datos e índices en páginas de 16kb. Dependiendo de cómo esté cambiando el valor de @eid entre consultas, es posible que ya haya almacenado en caché los datos de una consulta debido a las lecturas de disco de una consulta previa.
Asegúrese de haber creado los índices de forma idéntica. Use Explain para verificar si MySQL está usando el índice. Dado que incluyó el resultado de describe en lugar de mostrar tabla de creación o mostrar índices desde, no puedo decir si entity_id es parte de un índice compuesto. Si no era la primera parte de un índice compuesto, no se usaría.
Si está utilizando una versión relativamente moderna de MySQL, ejecute el siguiente comando antes de ejecutar la consulta:
conjunto de perfiles = 1;
Eso activará el perfilado de consultas para su sesión. Después de ejecutar la consulta, ejecute
show profiles;
Esto le mostrará la lista de consultas para las que hay perfiles disponibles. Creo que mantiene los últimos 20 por defecto. Suponiendo que su consulta fue la primera, ejecute:
muestre el perfil para la consulta 1;
A continuación, verá la duración de cada etapa al ejecutar su consulta. Esto es extremadamente útil para determinar qué (por ejemplo, bloqueos de tabla, clasificación, creación de tablas temporales, etc.) está causando que una consulta sea lenta.
Una prueba razonablemente simple de crear una nueva tabla MyISAM y sincronizar la consulta con esa tabla podría confirmar esta suposición. –