2010-03-18 18 views
20

¿Cómo funciona una consulta SQL? ¿Cómo se compila? ¿Se compila primero la cláusula from para ver si existe la tabla? ¿Cómo recupera realmente los datos de la base de datos? ¿Cómo y en qué formato se almacenan las tablas en una base de datos?¿cómo funciona una consulta SQL?

Estoy usando phpmyadmin, ¿hay alguna manera de ver los archivos donde se almacenan los datos? Estoy usando MySQL

+9

¡Esa es una gran pregunta! –

+0

No es una respuesta per se, pero así es como funciona en un nivel alto en Oracle. http://www.idevelopment.info/data/Oracle/DBA_tips/Tuning/TUNING_10.shtml – JavaRocky

+0

¿Puede proporcionar el producto específico que desea? SQL Server, MySQL, Oracle, etc. –

Respuesta

10

Bueno ...

  • Primero hay una comprobación de sintaxis, seguido por la generación de un árbol de expresión - en esta etapa también se puede comprobar si existen elementos y "cola" (es decir, existen campos DENTRO de la mesa). Este es el primer paso: cualquier error aquí que le digas al remitente que se vuelva real.
  • Entonces yo tengo ... análisis. Una consulta SQL es diferente de un programa en el sentido de que no dice CÓMO hacer algo, sino CUÁL ES EL RESULTADO. Establecer lógica basada. De modo que se obtiene un analizador de consultas (dependiendo del producto, del mal al bueno, del oráculo, del que hace tiempo que es malo, de DB2 el más sensible incluso de la velocidad del disco) para decidir la mejor manera de aproximarse a este resultado. Esta es una bestia realmente complicada: puede probar docenas o cientos de enfoques para encontrar uno que cree que es el más rápido (basado en el costo, básicamente, algunas estadísticas).
  • Luego se ejecuta.

El analizador de consultas, por cierto, es donde se ven enormes diferencias. No estoy seguro acerca de MySQL - SQL Server (Microsoft) brilla porque no tiene la mejor (pero una de las mejores), pero realmente tiene buenas herramientas visuales para MOSTRAR el plan de consulta, comparar las estimaciones del analizador para las necesidades reales (si difieren en demasiadas estadísticas de la tabla pueden estar desactivadas, entonces el analizador PIENSA que una tabla grande es pequeña). Lo presentan muy bien visualmente.

DB2 tuvo un gran optimizador durante algún tiempo, midiendo, como ya he dicho, la velocidad del disco para ponerlo en sus estimaciones. Oracle fue "de izquierda a derecha" (sin análisis real) durante mucho tiempo y tomó sugerencias de consulta proporcionadas por el usuario (enfoque de mierda). Creo que MySQL también era muy primitivo al principio, no estoy seguro de dónde está ahora.

Formato de tabla en la base de datos, etc. - eso es realmente algo que no debería preocuparse. Esto está documentado (claramente, especialmente para una base de datos de código abierto), pero ¿por qué debería importarme? He trabajado en SQL durante casi 15 años y nunca tuve esa necesidad. Y eso incluye hacer bastante trabajo final en algunas áreas. A menos que intente construir una herramienta de reparación de archivos de base de datos ... no tiene sentido molestarse.

+0

alguna buena información aquí. Gracias. – Learning

+0

@TomTom gracias, como dices, no necesito preocuparme por los formatos de tabla, pero realmente quiero saberlo por curiosidad.Si tuviera que diseñar un Db, quizás almacenara mis tablas en csvs y dijera strinfg processing para recuperar datos, pero solo quería saber cómo lo hicieron los demás. –

+0

definitivamente no es así;) Realmente - CSV es ridículamente ineficiente. SQL Server (el único que conozco los detalles) utiliza un archivo en páginas de 8kb con su propia estructura de administración que define lo que contiene la página. Hay páginas de índice, páginas de datos, etc. es realmente MUCHO más complicado para ser ALGÚN eficientes, un archivo CSV que será terriblemente ineficiente. – TomTom

4

Esta es una buena pregunta, pero no se puede responder completamente aquí.

Puede leer el libro Understanding MySQL Internals que le dará respuestas a la mayoría de sus preguntas.

1

Si su producto de destino es SQL Server, entonces this article es un buen lugar para comenzar.

+0

@thanks se verá en !! –

Cuestiones relacionadas