¿Qué hace realmente una base de datos para averiguar qué coincide con una declaración de selección?
Para ser franco, es una cuestión de fuerza bruta. Simplemente, lee cada registro de candidato en la base de datos y hace coincidir la expresión con los campos. Por lo tanto, si tiene "seleccionar * de la tabla donde nombre = 'fred'", literalmente recorre cada registro, toma el campo "nombre" y lo compara con 'fred'.
Ahora, si el campo "table.name" está indexado, entonces la base de datos (probablemente, pero no necesariamente) usará el índice primero para ubicar los registros candidatos a los que aplicar el filtro real.
Esto reduce el número de registros candidatos a los que aplicar la expresión; de lo contrario, simplemente hará lo que llamamos un "escaneo de tabla", es decir, leerá cada fila.
Pero fundamentalmente, la ubicación de los registros candidatos es independiente de cómo 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 combinación de manera diferente a una consulta con varias declaraciones "where key1 = key2"?
Bueno, una combinación se usa para crear una nueva "pseudotabla", sobre la cual se aplica el filtro. Entonces, tiene los criterios de filtro y los criterios de unión. Los criterios de combinación se utilizan para construir esta "pseudotabla" y luego el filtro se aplica contra eso. Ahora, al interpretar la combinación, vuelve a ser el mismo problema que el filtro: comparaciones de fuerza bruta y lecturas de índice para construir el subconjunto de la "pseudotabla".
¿Cómo almacena la base de datos toda su memoria?
Una de las claves para una buena base de datos es cómo administra sus búferes de E / S. Pero básicamente hace coincidir bloques de RAM con bloques de disco. Con los administradores de memoria virtual modernos, una base de datos más simple casi puede depender de la VM como su administrador de búfer de memoria. Los DB de gama alta hacen todo esto ellos mismos.
¿Cómo se almacenan los índices?
Árboles B + normalmente, deberías buscarlo. Es una técnica sencilla que ha existido durante años. Su beneficio se comparte con la mayoría de los árboles equilibrados: acceso constante a los nodos, además de que todos los nodos hoja están vinculados para que pueda atravesar fácilmente de un nodo a otro en orden clave. Entonces, con un índice, las filas pueden considerarse "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 llegar rápidamente no solo a un registro específico, sino a un punto dentro de una lista ordenada.
La mecánica real de almacenar e indexar filas en la base de datos es bastante sencilla y se comprende bien. El juego es administrar búferes y convertir SQL en rutas de consulta eficientes para aprovechar estos modismos básicos de almacenamiento.
Luego, está toda la complejidad de los múltiples usuarios, el bloqueo, el registro y las transacciones además del lenguaje de almacenamiento.