sql >> Base de Datos >  >> RDS >> Sqlserver

Devolver todas las filas de una partición específica en SQL Server (T-SQL)

Cuando crea una tabla particionada en SQL Server, especifica qué valores van en cada partición.

Esto se hace cuando crea la función de partición. Cuando crea la función de partición, especifica los valores límite, que determinan qué valores van a cada partición.

Una vez que haya creado su tabla particionada y haya insertado datos, puede ejecutar un SELECT normal declaración para devolver datos, tal como lo haría con una tabla sin particiones (en realidad, incluso las tablas sin particiones tienen una partición).

Pero, ¿sabía que también puede especificar de qué partición desea obtener datos?

Puedes hacer esto con la ayuda de $PARTITION función del sistema en su WHERE cláusula.

Ejemplo

Imagina que tenemos una tabla particionada que contiene los siguientes datos:

+---------+-------------+
| CatId   | CatName     |
|---------+-------------|
| 1       | Meow        |
| 2       | Fluffy      |
| 3       | Scratch     |
| 4       | Bulldog     |
| 5       | King George |
| 6       | Sharp       |
| 7       | Fritz       |
| 8       | Garfield    |
| 9       | Boss        |
+---------+-------------+

Y CatId es la columna de partición.

Y usamos la siguiente función de partición para crear sus particiones:

CREATE PARTITION FUNCTION CatsPartitionFunction (int)  
    AS RANGE LEFT FOR VALUES (-1, 5, 100);

Esto nos dice cómo se almacenan los datos, de acuerdo con los valores en la columna de partición.

Entonces ahora podemos ejecutar una consulta que solo devuelve datos de una partición específica.

Devolver datos de la segunda partición

Así es como podemos devolver todas las filas de la segunda partición.

SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;

Resultado:

+---------+-------------+
| CatId   | CatName     |
|---------+-------------|
| 1       | Meow        |
| 2       | Fluffy      |
| 3       | Scratch     |
| 4       | Bulldog     |
| 5       | King George |
+---------+-------------+

Devolver datos desde la tercera partición

Y aquí están todos los datos de la tercera partición.

SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;

Resultado:

+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 6       | Sharp     |
| 7       | Fritz     |
| 8       | Garfield  |
| 9       | Boss      |
+---------+-----------+

Devolver datos de la primera y la última partición

En este caso, mi primera partición está vacía porque no hay valores negativos en el CatId columna.

SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;

Resultado:

(0 rows affected)

De manera similar, la última partición también está vacía, debido a que no hay suficientes filas para llenar esa partición.

SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;

Resultado:

(0 rows affected)

Esto se adhiere a la recomendación de Microsoft de dejar la primera y la última partición vacías, para evitar cualquier movimiento de datos en caso de que las particiones se dividan o fusionen en el futuro.