Tags: rownum
Más información sobre las variables.
By admin on May 2, 2009 | In Gestión etc., Trucos avanzado | Send feedback »
Hola, yo pensé en hacer una pequeña adición a mi post anterior sobre las variables, ya que parece ser muy popular entre los lectores. En mi anterior entrada hablé principalmente de la utilización de las variables de sistema. Estos se establecen en el ámbito de tu período de sesiones utilizando Mysql - una vez que la conexión se termina la variable sale de ámbito de aplicación. Antes de ir a las variables globales, me gustaría mostrar el mejor uso que he visto recientemente de una variable de sesión. Se utiliza como alternativa a la función rownum, que está disponible en Oracle, pero no en Mysql. Aquí hay un ejemplo de esto en uso:
Code:
select @rownum:=@rownum+1 'row_num', | |
e.* from emp e, | |
(SELECT @rownum:=0) r | |
order by empno desc limit 5; |
Con este código se evita la necesidad de escribir una primera línea que asigna un valor a la variable antes de ejecutar la consulta de Select, es decir SET @rownum := 0;
Ahora voy a escribir un poco sobre las variables de sistema, que son muy útiles para las personas que tratan de mejorar el rendimiento de su sesión de Mysql. Normalmente puedes ver el estado de estas variables utilizando el comando SHOW VARIABLES. Aunque las variables de sistema tienen valores por defecto, la mayoría de ellas pueden cambiarse en tiempo de ejecución usando el comando SET. Ver el enlace para ver mas sobre variables de sistema del servidor:
manual server system variables
También hay variables de estado del servidor. Estos existen en las conexiones, y se puede actualizarlas en el archivo de configuración my.cnf Normalmente puedes ver el estado de estas variables utilizando el sentencia SHOW STATUS. Por ejemplo, el valor contra el nombre Select_full_join muestra el número de Full-joins que no utilizan índices. Si ves aquí un alto valor indica la necesidad de hacer una mejor indexación de las tablas correspondientes. Ver el enlace para ver el manual sobre variables de estado del servidor:
Manual server-status-variables
Por cierto, aquí hay un enlace que da 10 variables de MySql que debes controlar.
techrepublic link (en ingles)
Las diez variables en el enlace anterior son:
Threads_connected -- El número de conexiones abiertas actualmente. Esto puede ayudar en el análisis del tráfico o de decidir el mejor momento para un servidor de volver a empezar.
Created_tmp_disk_tables -- El número de tablas temporales en disco creadas automáticamente por el servidor mientras ejecutaba sentencias. Acceso a tablas en disco es generalmente más lento que el acceso a las mismas tablas en la memoria. Por lo tanto, las consultas que utilizan la sintaxis CREATE TEMPORARY TABLE puedan ser lento cuando este valor es alto.
Handler_read_first -- El número de veces que se lee la primera entrada de un índice. Si MySQL haga con frecuencia el acceso a la primera fila de una tabla de índice, sugiere que se trata de realizar un escaneo secuencial de todo el índice. Esto indica que la tabla correspondiente no ha sido debidamente indizados.
Innodb_buffer_pool_wait_free -- Normalmente, las escrituras al buffer de InnoDB se llevan acabo en segundo plano. Aún así, si es necesario leer o crear una página y no existe ninguna página vacía disponible, entonces es también necesario esperar a que las páginas sean volcadas previamente. Este contador cuenta las instancias de estas esperas. Si el tamaño del buffer ha sido establecido correctamente, este valor debería ser pequeño.
Key_reads -- El número de lecturas físicas de un bloque de claves desde disco. Si Key_reads es grande, entonces el valor de key_buffer_size es, probablemente, demasiado pequeño.
Max_used_connections -- El número máximo de conexiones que han sido utilizadas simultáneamente desde que el servidor ha sido iniciado. Este valor ofrece un punto de referencia para ayudarle a decidir el número máximo de conexiones de su servidor debe apoyar.
Open_tables -- El número de tablas que han sido abiertas. Si Opened_tables es grande, probablemente el valor de table_cache es demasiado pequeño.
Select_full_join -- El número de joins que no utilizan índices. Si este valor no es 0, debería comprobar cuidadosamente los índices de sus tablas.
Slow_queries -- El número de consultas que han tardado más de long_query_time segundos. Un valor alto indica que el número de consultas no se ejecuta óptimamente. Un siguiente paso necesario sería examinar el log de consultas lentas e identificar estas consultas para la optimización.
Uptime -- El número de segundos que el servidor ha estado funcionando ininterrumpidamente
Recuerda que si estás buscando una variable específica a través de SHOW STATUS, siempre podriás utilizar la cláusula de LIKE por ejemplo:
Code:
show status like 'max%'; |
Bueno, como ya he dicho, es sólo una breve entrada esta vez.
Vuelvo
Thanks,
Mark