La indexación en clúster ahora es imprescindible, ¿por qué?


9

Anteriormente, hubo debates / discusiones no concluyentes para mí sobre si (siempre) participar / evitar índices agrupados.

Bueno, entendí que a veces se deben usar con fines y contexto adecuados + específicos.

Requisito de índice agrupado de la base de datos SQL Azure :

"SQL Azure no admite tablas sin índices agrupados. Una tabla debe tener un índice agrupado. Si se crea una tabla sin una restricción agrupada, se debe crear un índice agrupado antes de permitir una operación de inserción en la tabla".

no encaja en las conclusiones anteriores, justificación y explicaciones.

¿Cuál es la razón, que me he perdido de las explicaciones anteriores, de imponer rígidamente la ubicuidad de los índices agrupados sin ninguna excepción?


44
SQL Azure es diferente a SQL Server tal como lo conoce. Azure es una base de datos distribuida, que almacena sus datos en más de una máquina física. Es por eso.

1
Tenga en cuenta que en v12 del Servicio de base de datos SQL de Azure, puede tener una tabla sin un índice agrupado.
Troy Hunt

Respuestas:


11

Leer dentro de SQL Azure :

SQL Azure proporciona bases de datos lógicas para el almacenamiento de datos de la aplicación. En realidad, los datos de cada suscriptor se almacenan varias veces, replicados en tres bases de datos de SQL Server que se distribuyen en tres servidores físicos en un solo centro de datos. Muchos suscriptores pueden compartir la misma base de datos física.

Se requieren claves agrupadas para que las tres réplicas de sus datos se puedan mantener sincronizadas. Sin clave, es imposible saber qué filas se actualizaron. Los montones (tablas con un índice agrupado) solo tienen 'claves' físicas (fileid: pageid: slot) y dado que sus 3 réplicas de la base de datos lógica comparten la base de datos física con otras bases de datos lógicas, la dirección física en un servidor no tiene significado en el otro réplicas, por lo tanto, los montones no podrían ser replicados.


Una clave (lógica) no tiene que residir en un índice agrupado. Podría ser no agrupado. Quizás la verdadera razón por la que se requiere un índice agrupado (¿presumiblemente único?) Es que los montones usan RID mientras que los índices agrupados únicos no. ¿Es eso lo que querías decir?
nvogel

3
Del documento vinculado: "La tecnología de alta disponibilidad y replicación subyacente en SQL Azure se basa en la replicación de filas B-Tree". Entonces, incluso si un montón tuviera una clave NC, solo podría replicar el NC, pero no el montón en sí.
Remus Rusanu


1

Azure es un sistema distribuido basado en la nube en servidores remotos. Es probable que los datos se almacenen en múltiples unidades / servidores, y sería extremadamente ineficiente hacer esto en un montón (ya que el sistema necesitará saber qué máquina verificar, y sin un índice agrupado, esta es una operación que requiere muchos recursos) .

El índice agrupado proporciona una búsqueda para todas las filas y todos los demás índices de la tabla, por lo que sin una cada operación en azul sería un escaneo de tabla en varias máquinas.


2
Eso podría ser cierto, pero por el momento no lo es. Lea el artículo que vinculé, explica cómo funciona el enrutamiento de solicitudes y por qué sus consultas se ejecutan siempre en un solo cuadro y nunca abarcan varios servidores. Es decir. No hay fragmentación.
Remus Rusanu
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.