2012-04-01 26 views
9

Acabo de migrar a mysql 5.5.20 y tuve un problema de rendimiento con tablas temporales. Tengo un procedimiento almacenado que crea ocho de ellos, similar a esto:Innodb y tablas temporales

create temporary table t_opened_today 
(
    portfolio_id  integer, 
    position_type_id tinyint, 
    open_value   decimal(12,2), 
    today_net   decimal(12,2) 
); 

En MySQL 5.5 tiene InnoDB como motor de almacenamiento por defecto. Solía ​​estar en 5.1 y ese no era el caso. entonces, estaba creando las tablas temporales con Innodb. Lo verifiqué mirando/tmp y no vi ningún .MYI o .MYD. Esto tomaba 0.50 segundos para hacer (o más, el tiempo de ejecución rebotaba por todos lados), lo cual es ridículo.

así que modifiqué la definición de la tabla para incluir "Engine = MyISAM" y me llevó 0.00 segundos (como era de esperar) no hacer nada más que crear las 8 tablas temporales y salir.

¿Alguien tiene una idea de por qué tomaría tanto tiempo en Innodb crear estas tablas temporales? Quizás la creación de tablas temporales utilizando el motor de almacenamiento predeterminado es una especie de gran no-no?

No he hecho mucho de nada en my.cnf ya que estoy en funcionamiento. Lo hice aumentar los registros del valor predeterminado ... pero eso es todo. Entonces la configuración está lista para usar.

gracias!

Respuesta

2

Si está utilizando la configuración predeterminada, entonces mysql usará un espacio de tabla único para todas las tablas innodb, lo que probablemente explica por qué es relativamente lento crear tablas temporales. Sugeriría utilizar el motor de almacenamiento MEMORY (HEAP) para sus tablas temporales si tiene suficiente memoria disponible.

+1

thx, aunque todavía parece extraño que la creación de tablas temporales con el motor Innodb lleve tanto tiempo. –

Cuestiones relacionadas