Blog de Gonzalo

Blog de programación de Gonzalo López

OPTIMIZANDO QUERIES

MYSQL

Siempre hay que buscar la manera de optimizar la recuperación de información de una base de datos desde un buen esquema de base de datos, uso de índices hasta hacer unas queries óptimas.En este post voy a poner unos trucos para que desde las queries se le diga a la base de datos que hacer para mejorar el rendimiento:

  • ALL, DISTINCT, DISTINCTROW: Sirven para determinar si queremos quedarnos con todos los registros (ALL, valor por defecto) o queremos eliminar los duplicados (DISTINCT, DISTINCTROW son sinónimos).
  • HIGH_PRIORITY: Da prioridad al SELECT sobre instrucciones INSERT que se estén ejecutando al mismo tiempo. Solo afecta a tablas que solo disponen de bloqueo de tabla (MyISAM, MEMORY, MERGE).
  • STRAIGHT_JOIN: Fuerza al optimizador a ejecutar el JOIN en el orden exacto en en que se especifica en la sentencia SELECT. Se usa cuando sabemos que el optimizador produce una orden que de hecho no es óptimo.
  • SQL_BIG_RESULT: Se puede usar con GROUP BY y DISTINCT para decirle al optimizador que el resultado va a ser muy grande. Eso le dice al optimizador que debe usar tablas temporales en disco.
  • SQL_BUFFER_RESULT: Fuerza a que los resultados sean almacenados en una tabla temporal. Esto ayuda a MySQL a liberar los bloqueos de tabla rápidamente y ayuda en casos en que tarda mucho tiempo en enviar el resultado al cliente.
  • SQL_SMALL_RESULT: puede usarse con GROUP BY o DISTINCT para decir al optimizador que el conjunto de resultados es pequeño. En este caso, MySQL usa tablas temporales rápidas para almacenar la tabla resultante en lugar de usar ordenación. En MySQL 5.0, esto no hará falta normalmente.
  • SQL_CALC_FOUND_ROWS: le dice a MySQL que calcule cuántos registros habrán en el conjunto de resultados, sin tener en cuenta ninguna cláusula LIMIT. El número de registros pueden encontrarse con SELECT FOUND_ROWS().
  • SQL_CACHE: le dice a MySQL que almacene el resultado de la consulta en la caché de consultas si está usando un valor de query_cache_type de 2 o DEMAND. Para una consulta que use UNION o subconsultas, esta opción afecta a cualquier SELECT en la consulta.
  • SQL_NO_CACHE: le dice a MySQL que no almacene los resultados de consulta en la caché de consultas. Para una consulta que use UNION o subconsultas esta opción afecta a cualquier SELECT en la consulta.

Compartir en twitter