Lo primero que hay que revisar cuando queremos hacer una consulta mas rápida, es el
uso de indices.
Tips para Optimización de Consultas:
- Usar el comando EXPLAIN <consulta>, regresa información con respecto a la consulta.
- id: Numero secuencial de la consulta
- select_type: Tipo de consulta, los cuales pueden ser:
- SIMPLE: Consulta simple, sin subquerys.
- PRIMARY: Similar a la consulta simple.
- UNION: Segunda o tercera consulta dentro de una union.
- DEPEDENT UNION: Similar a UNION.
- UNION RESULT: Resultado de la UNION.
- SUBQUERY: Primer subconsulta
- DEPENDENT SUBQUERY: Similar a subquery
- DERIVED: Subconsulta en una clausula FROM.
- table: Tabla a la que hace refernecia los registros.
- type: Tipo de join.
- system: Solo tiene un registro
- const:
- eq_ref:
- refref_or_null:
- index_merge:
- unique_subquery:
- index_subquery: Es similar al unique_subquery, remplaza las subconsultas en IN, pero trabaja sobre indices no unicos.
- range: Solo los registros que fueron solicitaos son los que se regresan.
- index: Similar al "ALL", por lo general es mas rápido que el de ALL ya que se basa en el scaneo del arbol del indice.
- ALL: Escaneo completo de la tabla.
- Suponiendo que tenememos una consulta con comparaciones entre campos, ya sea en un inner join ON, ó where, es importante mantener el mismo tipo de campos y padding en ambos. varchar(10) vs varchar(15) no es bueno, varchar(10) vs char(10) si lo es.
- En la clausula WHERE:
- Remover los parentecis inecesarios.
- Las constantes con indices se evaluan solo una vez.
- Count(*) sin WHERE, es obtenido de la información del cabcesero de la tabla.
- Para cada tabla en un join,
- Las tablas constantes son leidas antes que cualquier otra tabla; las tablas constantes son, tablas vacias o con un solo registro,
tablas que son usadas en WHERE en una llave primaria o unica.
- La mejor forma de