MySql

Como optimizar consultas en mysql

Por : Jhons_1101
2017-03-21
Tags :
En baluart.net han publicado un interesante listado de consejos y tips para optimizar las consultas MySQL. Aquí las posteo y ampliamos la información.
compartir en facebook compartir en Google compartir en Twitter compartir en Blogger compartir como código embebido compartir la url
  • Usar el comando Explain
  • El comando Explain explica como se lleva a cabo una consulta SELECT, como se usan los índices y como se unen las tablas. La forma de utilizarlo es la siguiente:
    
    --
    Explain select * from tabla
    
    
    Ahora, en lugar de ejecutar la consulta, se mostrará un listado con la información ya mencionada anteriormente. Esto es muy útil para optimizar las consultas. Más información.



  • Usar permisos poco complejos
  • Por defecto, el usuario que utilizamos para conectar nuestra aplicación a la Base de datos, goza todos los permisos MySQL. Sin embargo, el utilizar un usuario con sólo los permisos necesarios (para la publicación, por ejemplo), permiten a MySQL reducir la comprobación de cada uno de los permisos, cada vez que el cliente MySQL ejecute las sentencias (INSERT, por ejemplo).



  • Hacer BENCHMARK() a nuestras expresiones
  • Si tenemos un problema de rendimiento con una expresión que ya hemos identificado, una excelente manera de comprobar su optimización es utilizando la función benchmark(). Su sintaxis es la siguiente:
    
    --
    BENCHMARK(loop_count,expression)
    
    
    Esta función siempre devuelve un valor cero, pero además imprime el tiempo que se ha demorado en el cliente final (no el tiempo de CPU en el servidor).



  • Optimizar la cláusula WHERE
  • Estos son algunos consejos para optimizar WHERE:

    * Remover los paréntesis innecesarios.
    Por ejemplo:
    
    -- En vez de esto.....
    (a < b AND b = c) AND a = 5
    -- Utilizar esto...
    a > b AND b = c AND a = 5
    
    



    * COUNT(*) esta optimizado para devolver un SELECT de manera mucho más rápida, siempre y cuando sea a una tabla y sin usar WHERE.
    Por ejemplo:
    
    -- 
    SELECT COUNT(*) FROM tabla
    
    



    * La opción SQL_SMALL_RESULT, puede usarse con GROUP BY o DISTINCT para indicar que el conjunto de resultados es pequeño.
    En este caso, MySQL utiliza tablas temporales muy rápidas para almacenar la tabla resultante en lugar de usar ordenación.


  • Utilizar la sentencia OPTIMIZE TABLE
  • OPTIMIZE TABLE debe usarse si se ha eliminado gran parte de la tabla o si se han hecho varios cambios en la misma. Optimize Table desfragmenta la tabla, la repara y la ordena.
    
    --
    OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE
        tbl_name [, tbl_name] ...
    
    




  • Evitar los tipos de columna de longitud variable
  • Los campos con longitud fija (CHAR, por ejemplo) son más rápidos que los de longitud variable (VARCHAR, por ejemplo). Pero, como contrapartida, ocupan más espacio en disco. Aún así, para las tablas MyISAM, se recomienda evitar el uso de las columnas de longitud variable (VARCHAR, BLOB, and TEXT).
    Importante: utilice siempre la cantidad máxima de caracteres para el tipo de campo, No utilice siempre VARCHAR(400) por default que pone MySQL. Ejemplo... Para un campo de nombre, basta con 30 caracteres...
    
    CREATE TABLE MyGuests (
    	id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    	firstname VARCHAR(30) NOT NULL,
    	lastname VARCHAR(30) NOT NULL,
    	email VARCHAR(50),
    	reg_date TIMESTAMP
    )
    
    



  • Insert Delayed
  • Se recomienda utilizar INSERT DELAYED cuando los clientes no pueden esperar a que el INSERT se complete ó cuando no sea necesario conocer que los datos han sido escritos correctamente.
    Cuando se usa INSERT DELAYED, se obtiene una confirmación inmediata por parte del servidor. La data se almacena en una cola para ser insertada cuando la tabla no esté en uso por ningún otro proceso. Además, los INSERT en cola son agrupados en bloques lo que aumenta la rapidez de su ejecución.




  • Priorizar las sentencias
  • Aquí explicamos dos maneras:

    * Utilizar INSERT LOW_PRIORITY en los INSERT, cuando se desee priorizar las consultas SELECT, sobre las INSERT,. El INSERT, debe esperar hasta que no hayan otros clientes leyendo la tabla.

    * Utilizar SELECT HIGH_PRIORITY en los SELECT,, para priorizarlos sobre cualquier otro comando que se ejecute simultáneamente, ya sea para añadir o actualizar datos en la tabla.


  • Insertar filas múltiples
  • Es recomendable ejecutar un insert multiple a varios inserts distintos. La sintaxis es:
    
    INSERT INTO table (col1, col2) VALUES ('value1', 1), ('value2', 2), ('value3', 3)
    
    



  • Sincronizar tipos de datos
  • La idea es la siguiente. Si se tienen columnas que van a almacenar la misma información, pero están en distintas tablas, es aconsejable que sean del mismo tipo de datos. De esta manera, los JOINS que se ejecuten entre ellas, serán mucho más rápidos.




    Si este contenido te fue útil, no olvides compartirlo en redes sociales, Considéralo. Puede ser la manera de agradecer!


    Agrega tu comentario...

    Puedes utilizar etiquetas <pre></pre>, <p></p>, <div></div>, + (Nombre usuario, para responderle a alguien)

    ojefzF6





    Este post no tiene comentarios, sé el primero en hacerlo
    Esta entrada no cuenta con imágenes adjuntas

    Unete al grupo de whatsApp +57 316 392 6456

    Sigue el grupo en facebook

    Siguenos.....