Supongo que está preguntando sobre la optimización de consultas, que es cómo una base de datos decide responder una consulta en un lenguaje como SQL. El enfoque adoptado por el motor db se llama el plan de consulta. Puede ver los planes de consulta en la mayoría de los motores SQL utilizando una instrucción EXPLAIN antes del texto de la consulta.
Si está preguntando qué es lógicamente difícil al respecto, hay muchas partes móviles en una consulta de base de datos que no se especifican directamente en el texto de la consulta, como
- Unir orden. ¿Dónde “inicia” la unión, cómo se atraviesan las tablas y cuál es la tabla “final”? En una consulta compleja con muchas combinaciones y predicados complejos, esto está lejos de ser dado, y es, en general, un problema N ^ 2 si tiene N tablas en la consulta.
- ¿Cómo ejecutas la unión? ¿Puedes simplemente buscar índices para responder a la unión? No siempre tiene índices, e incluso si los tiene, no siempre son la mejor manera de ejecutar una unión (a menudo es más rápido usar un bucle anidado versus índices para tablas pequeñas). Si usa un bucle anidado de fuerza bruta, si usa una combinación hash (esencialmente un índice “temporal”), si usa una combinación de combinación o clasificación (donde clasifica uno o ambos conjuntos de trabajo en la combinación), etc. Y algunos motores db admiten múltiples tipos de índices (y los permiten en las mismas columnas), que funcionan mejor o peor para diferentes tipos de búsquedas.
- Entonces, si tiene K métodos de unión y N tablas de unión, puede ver que puede terminar fácilmente con una gran cantidad de posibles planes de consulta sin muchas tablas en la unión simplemente considerando el orden de unión + método de unión.
- Otro factor es la estadística de tabla. Saber qué tan grande es una tabla en relación con otras tablas en una consulta es extremadamente útil para determinar el orden de unión y decidir qué tipo de método de unión usar.
- Otro factor más son las propiedades de la tabla. Si algo es una clave principal o se sabe que es único, probablemente sea lo mejor para unirse, incluso si hay otros predicados de unión en las tablas.
- Más diversión: subconsultas, etc. ¿Está correlacionado o no? ¿Puedes reescribir la subconsulta como unir o no?
- Otro factor es que no desea que la optimización en sí tome mucho tiempo. Si no tiene cuidado, podría terminar tardando más en planificar la consulta que en ejecutar el plan de consulta. En MySQL 5.5, a menudo veía consultas que tomaban decenas de segundos para planear, y milisegundos para ejecutar, y requería una sugerencia de optimizador para que el planificador terminara en una cantidad de tiempo razonable.
La optimización de consultas es un problema “95-4-1”, ya que cualquier optimizador codificado de manera sensata puede obtener un buen plan el 95% y un plan aceptable el 4% del tiempo, pero donde las personas obtienen su doctorado es encontrar enfoques para el otro 1% Estas “consultas del 1%” son a menudo bastante difíciles y “bastante importantes”.
- ¿Cuál es un buen problema que alguien que está entrando en matemáticas debería intentar probar?
- ¿Qué momento de flexión se requiere para la formación de bisagras de plástico en un iPhone 6 Plus?
- ¿Cuál es la solución de la pregunta AP en la imagen a continuación?
- ¿Alguien puede ayudarme a comprender esta parte de la prueba de Kolmogorovs del Teorema de Cantor-Bernstein?
- Cómo usar la teoría de juegos (el campo de las matemáticas, no el estudio de los videojuegos) en el diseño de videojuegos