unload outfile joins into from cross mysql sql

mysql - outfile - SQL_NO_CACHE no funciona



select from table into outfile mysql (4)

  1. consulte: http://forums.mysql.com/read.php?24,225286,225468#msg-225468
  2. puede probar RESET QUERY CACHE (necesita el privilegio RELOAD) aunque, si acaba de leer el enlace anterior, es probable que esto tampoco funcione :(

La primera vez que ejecuto este sql, necesita 39 segundos, cuando vuelvo a ejecutarlo y aumente SQL_NO_CACHE, no parece tener efecto:

mysql> select count(*) from `deal_expired` where `site`=8&&`area`=122 && endtime<1310444996056; +----------+ | count(*) | +----------+ | 497 | +----------+ 1 row in set (39.55 sec) mysql> select SQL_NO_CACHE count(*) from `deal_expired` where `site`=8&&`area`= 122 && endtime<1310444996056; +----------+ | count(*) | +----------+ | 497 | +----------+ 1 row in set (0.16 sec)

He intentado una variedad de métodos, here

e incluso reiniciar el servidor mysql o cambiar el nombre de la tabla, pero todavía no puedo dejar que 39 segundos ejecuten este SQL

Reemplacé otro SQL, y un aumento en la primera ejecución en SQL_NO_CACHE, el problema es el mismo:

mysql> select SQL_NO_CACHE count(*) from `deal_expired` where `site`=25&&`area`= 134 && endtime<1310483196227; +----------+ | count(*) | +----------+ | 315 | +----------+ 1 row in set (2.17 sec) mysql> select SQL_NO_CACHE count(*) from `deal_expired` where `site`=25&&`area`= 134 && endtime<1310483196227; +----------+ | count(*) | +----------+ | 315 | +----------+ 1 row in set (0.01 sec)

¿Cual es la razon? ¿Cómo puedo obtener el mismo tiempo de ejecución de SQL?

Quiero encontrar una manera de optimizar este SQL para realizar 39 segundos

BTW: RESET QUERY CACHE FLUSH QUERY CACHE FLUSH TABLES SET SESSION query_cache_type=off no funciona

El caché de estado de mysql se ha cerrado:

mysql> SHOW STATUS LIKE "Qcache%"; +-------------------------+-------+ | Variable_name | Value | +-------------------------+-------+ | Qcache_free_blocks | 0 | | Qcache_free_memory | 0 | | Qcache_hits | 0 | | Qcache_inserts | 0 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 0 | | Qcache_queries_in_cache | 0 | | Qcache_total_blocks | 0 | +-------------------------+-------+ 8 rows in set (0.04 sec) mysql> select count(*) from `deal_expired` where `site`=25&&`area`=134 && endtime<1310 483196227; +----------+ | count(*) | +----------+ | 315 | +----------+ 1 row in set (0.01 sec) mysql> SHOW STATUS LIKE "Qcache%"; +-------------------------+-------+ | Variable_name | Value | +-------------------------+-------+ | Qcache_free_blocks | 0 | | Qcache_free_memory | 0 | | Qcache_hits | 0 | | Qcache_inserts | 0 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 0 | | Qcache_queries_in_cache | 0 | | Qcache_total_blocks | 0 | +-------------------------+-------+ 8 rows in set (0.00 sec)

explique este SQL, se usó sitio + índice compuesto de tiempo final (llamado site_endtime):

mysql> explain select count(*) from `deal_expired` where `site`=8&&`area`=122 && endti me<1310444996056; +--------+------+-------------------------------+--------------+---------+------ -+------+-------------+ | table | type | possible_keys | key | key_len | ref | rows | Extra | +--------+------+-------------------------------+--------------+---------+------ -+------+-------------+ | deal_expired | ref | name,url,endtime,site_endtime | site_endtime | 4 | const | 353 | Using where | +--------+------+-------------------------------+--------------+---------+------ -+------+-------------+ 1 row in set (0.00 sec)


La primera consulta debe usar SQL_NO_CACHE para decirle a MySQL que no ponga el resultado en el caché. La segunda consulta utiliza el caché y le dice a MySQL que no almacene en caché el resultado de esa consulta, que no hace nada.

tl; dr - Revertir sus consultas.


La respuesta a "¿Cómo puedo obtener el mismo tiempo de ejecución de SQL?" es - no puedes Si su consulta lee algunas filas, se almacenan en caché, dependiendo del motor de almacenamiento en uso, esas filas están en la caché del sistema operativo (myisam) o en el grupo de búferes (innodb). Si las filas se almacenan en caché, ejecutar la misma consulta por segunda vez es mucho más rápido, ya que MySQL no tiene que leer del disco.


Tenía la impresión de que no se almacenaría en caché la inclusión de cualquier tipo de función SQL que se calcula en el tiempo de ejecución actual. ¿Has intentado hacer algo como lo siguiente?

select count(*), now() from `deal_expired` where `site`=8&&`area`=122 && endtime<1310444996056;