Tengo una tabla en una base de datos de SQL Server con un índice agrupado en la clave primaria. La tabla tiene 1 millón de filas. Si elimino 10K filas de la tabla, ¿se reestructura el índice durante la operación de eliminación?
La operación de eliminación es parte del procedimiento almacenado. A la vez, más de un cliente puede ejecutar el procedimiento almacenado, sin embargo, cada ejecución individual eliminará su propio conjunto de filas (identificadas de forma exclusiva por la clave primaria). Estoy bloqueando el bloqueo de teclas (de tipo U) cuando varios clientes ejecutan el procedimiento. El bloqueo del bloqueador pertenece a una fila de la misma tabla y no forma parte de ninguna de las transacciones que se ejecutan simultáneamente. No debería haber ningún bloqueo ya que cada ejecución intenta eliminar su propio conjunto de filas. La escalada de bloqueo no ocurre porque está desactivada.
Sospecho que la operación de eliminación debe estar causando que el índice se vuelva a equilibrar y, por lo tanto, durante el proceso de reestructuración, puede bloquear las teclas en cualquier fila de la tabla.
Realmente agradecería cualquier opinión sobre esto.
fuente
Respuestas:
Para responder a la pregunta en el título, si el árbol B se reequilibró durante una eliminación, la respuesta parece ser no, al menos en el siguiente caso de prueba mínimo.
La siguiente demostración ejecuta comandos que es mejor dejar para un entorno de prueba.
Esta demostración muestra que una eliminación puede producir un árbol b muy desequilibrado, con prácticamente todos los datos en un lado.
fuente