Como aludió @Souplex en los comentarios, una posible explicación podría ser si esta columna es la primera NULL
columna de tabla en el índice no agrupado en el que participa.
Para la siguiente configuración
CREATE TABLE Foo
(
A UNIQUEIDENTIFIER NOT NULL DEFAULT NEWSEQUENTIALID() PRIMARY KEY,
B CHAR(1) NOT NULL DEFAULT 'B'
)
CREATE NONCLUSTERED INDEX ix
ON Foo(B);
INSERT INTO Foo
(B)
SELECT TOP 100000 'B'
FROM master..spt_values v1,
master..spt_values v2
sys.dm_db_index_physical_stats muestra que el índice no agrupado ix
tiene 248 páginas de hoja y una sola página raíz.
Una fila típica en una página de índice se ve así
Y en la página raíz
Entonces corriendo ...
CHECKPOINT;
GO
ALTER TABLE Foo ALTER COLUMN B CHAR(1) NULL;
SELECT Operation,
Context,
ROUND(SUM([Log Record Length]) / 1024.0,1) AS [Log KB],
COUNT(*) as [OperationCount]
FROM sys.fn_dblog(NULL,NULL)
WHERE AllocUnitName = 'dbo.Foo.ix'
GROUP BY Operation, Context
Devuelto
+-----------------+--------------------+-------------+----------------+
| Operation | Context | Log KB | OperationCount |
+-----------------+--------------------+-------------+----------------+
| LOP_SET_BITS | LCX_GAM | 4.200000 | 69 |
| LOP_FORMAT_PAGE | LCX_IAM | 0.100000 | 1 |
| LOP_SET_BITS | LCX_IAM | 4.200000 | 69 |
| LOP_FORMAT_PAGE | LCX_INDEX_INTERIOR | 8.700000 | 3 |
| LOP_FORMAT_PAGE | LCX_INDEX_LEAF | 2296.200000 | 285 |
| LOP_MODIFY_ROW | LCX_PFS | 16.300000 | 189 |
+-----------------+--------------------+-------------+----------------+
Verificando la hoja de índice nuevamente, las filas ahora se ven como
y las filas en las páginas de nivel superior como a continuación.
Cada fila se ha actualizado y ahora contiene dos bytes para el recuento de columnas junto con otro byte para NULL_BITMAP.
Debido al ancho de fila adicional, el índice no agrupado ahora tiene 285 páginas de hoja y ahora dos páginas de nivel intermedio junto con la página raíz.
El plan de ejecución para el
ALTER TABLE Foo ALTER COLUMN B CHAR(1) NULL;
se ve de la siguiente manera
Esto crea una nueva copia del índice en lugar de actualizar la existente y la necesidad de dividir las páginas.