MySQL utiliza un optimizador basado en costos para determinar la mejor manera de resolver una consulta. En muchos casos, MySQL puede calcular el mejor plan de consulta posible, pero a veces MySQL no tiene suficiente información sobre los datos a mano y tiene que hacer suposiciones “educadas” sobre los datos.
Em ñps casps em qie MySQL no hace lo "adecuado", las herramientas que usted tiene disponible para ayudar a MySQL son:
Utilice la sentencia EXPLAIN
para obtener
información sobre como MySQL procesa una consulta. Para
utilizarlo, simplemente añada la palabra clave
EXPLAIN
al inicio de su sentencia
SELECT
:
mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;
EXPLAIN
está explicado con más detalle en
Sección 7.2.1, “Sintaxis de EXPLAIN
(Obtener información acerca de
un SELECT
)”.
Utilice ANALYZE TABLE
para
actualizar las definiciones de claves de la tabla analizada.
Consulte Sección 13.5.2.1, “Sintaxis de nombre_de_tabla
ANALYZE TABLE
”.
Utilice FORCE INDEX
sobre la tabla
analizada para decirle a MySQL que los escaneos de tabla son
muy costosos comparado con utilizar el índice dado. Consulte
Sección 13.2.7, “Sintaxis de SELECT
”.
SELECT * FROM t1, t2 FORCE INDEX (index_for_column) WHERE t1.col_name=t2.col_name;
USE INDEX
y IGNORE INDEX
podrían también ser útiles.
STRAIGHT_JOIN
a nivel global y de tabla.
Consulte Sección 13.2.7, “Sintaxis de SELECT
”.
Puede adaptar variables globales o específicas de hilos de
ejecución. Por ejemplo, inicie mysqld con
la opción --max-seeks-for-key=1000
o
utilice SET max_seeks_for_key=1000
para
decirle al optimizador que asuma que ninguna rastreo de claves
genera más de 1000 búsquedas. Consulte
Sección 5.3.3, “Variables de sistema del servidor”.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.