¿Qué hacer realidad una base de datos a averiguar lo que coincide con un selecto declaración?
Para ser franco, es una cuestión de fuerza bruta. Simplemente, lee cada registro candidato en la base de datos y coincide con la expresión de los campos. Entonces, si tiene "select * from table where name = 'fred'", literalmente recorre cada registro, toma el campo "name" y lo compara con 'fred'.
Ahora, si el campo "table.name" está indexado, entonces la base de datos usará (probablemente, pero no necesariamente) el índice primero para ubicar los registros candidatos para aplicar el filtro real.
Esto reduce el número de registros candidatos para aplicar la expresión, de lo contrario solo hará lo que llamamos "exploración de tabla", es decir, leer cada fila.
Pero, fundamentalmente, sin embargo, ubica los registros candidatos es independiente de cómo se aplica la expresión de filtro real, y, obviamente, hay algunas optimizaciones inteligentes que se pueden hacer.
¿Cómo interpreta una base de datos una unión de manera diferente a una consulta con varios declaraciones "donde key1 = clave2"?
Bueno, una unión se utiliza para hacer una nueva "pseudo tabla", sobre la que se aplica el filtro. Entonces, tiene los criterios de filtro y los criterios de unión. El criterio de unión se usa para construir esta "pseudo tabla" y luego el filtro se aplica contra eso. Ahora, al interpretar la unión, vuelve a ser el mismo problema que el filtro: comparaciones de fuerza bruta y lecturas de índice para construir el subconjunto para la "pseudo tabla".
¿Cómo almacena la base de datos toda su memoria ?
Una de las claves para una buena base de datos es cómo gestiona sus búferes de E/S. Pero básicamente combina bloques de RAM con bloques de disco. Con los administradores de memoria virtual modernos, una base de datos más simple casi puede confiar en la VM como su administrador de búfer de memoria. Los DB's de gama alta hacen todo esto ellos mismos.
¿Cómo se almacenan los índices?
B + Árboles normalmente, se debe mirar hacia arriba. Es una técnica directa que ha existido durante años. Su beneficio se comparte con la mayoría de los árboles balanceados: acceso consistente a los nodos, además de que todos los nodos hoja están vinculados para que pueda pasar fácilmente de un nodo a otro en el orden de las teclas. Entonces, con un índice, las filas se pueden considerar "ordenadas" para campos específicos en la base de datos, y la base de datos puede aprovechar esa información para beneficiarse de las optimizaciones. Esto es distinto de, por ejemplo, usar una tabla hash para un índice, que solo le permite acceder rápidamente a un registro específico. En un B-Tree puede obtener rápidamente no solo un registro específico, sino también un punto dentro de una lista ordenada.
La mecánica real de almacenar e indexar filas en la base de datos es realmente bastante directa y bien entendida. El juego está gestionando búferes y convirtiendo SQL en rutas de consulta eficientes para aprovechar estas expresiones básicas de almacenamiento.
Luego, está toda la complejidad de múltiples usuarios, bloqueo, registro y transacciones además de la expresión de almacenamiento.
A partir de 2015, hay un [este artículo] (http://coding-geek.com/how-databases-work/) que parece bastante bueno. – Piovezan
Pruebe esto http://db.cs.berkeley.edu/papers/fntdb07-architecture.pdf y la WikiPedia. Este es un gran tema y modelos como RDBMS, FLATFILE, etc. El analizador es realmente uno de los componentes más importantes. Gracias –
Si es un servidor SQL, recomiendo encarecidamente la serie Inside Microsoft SQL Server 2005 (Microsoft press) especialmente el motor de almacenamiento y las consultas ... Responde todas sus preguntas y mucho más. Puede que le interesen algunos de estos blogs: [Craig Freedman] (http://blogs.msdn.com/craigfr/) [Kalen Delaney] (http://sqlblog.com/blogs/kalen_delaney/) Merece la pena suscribirse a [ SQLServerCentral] (http://www.sqlservercentral.com/) también .. –