Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zwróć wszystkie wiersze z określonej partycji w SQL Server (T-SQL)

Podczas tworzenia tabeli partycjonowanej w programie SQL Server określasz, które wartości trafiają do każdej partycji.

Odbywa się to podczas tworzenia funkcji partycji. Podczas tworzenia funkcji partycji określasz wartości graniczne, które określają, które wartości trafiają do każdej partycji.

Po utworzeniu tabeli partycjonowanej i wstawieniu danych możesz uruchomić normalny SELECT instrukcja zwracania danych, tak jak w przypadku tabeli niepartycjonowanej (w rzeczywistości nawet tabele niepartycjonowane mają jedną partycję).

Ale czy wiesz, że możesz również określić, z której partycji chcesz pobrać dane?

Możesz to zrobić za pomocą $PARTITION funkcja systemowa w Twoim WHERE klauzula.

Przykład

Wyobraź sobie, że mamy podzieloną na partycje tabelę zawierającą następujące dane:

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

I CatId to kolumna partycjonująca.

I użyliśmy następującej funkcji partycji, aby utworzyć jej partycje:

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

To mówi nam, jak dane są przechowywane, zgodnie z wartościami w kolumnie partycjonowania.

Możemy więc teraz uruchomić zapytanie, które zwraca tylko dane z określonej partycji.

Zwróć dane z drugiej partycji

Oto jak możemy zwrócić wszystkie wiersze z drugiej partycji.

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

Wynik:

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

Zwróć dane z trzeciej partycji

A oto wszystkie dane z trzeciej partycji.

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

Wynik:

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

Zwróć dane z pierwszej i ostatniej partycji

W tym przypadku moja pierwsza partycja jest pusta, ponieważ w CatId nie ma wartości ujemnych kolumna.

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

Wynik:

(0 rows affected)

Podobnie ostatnia partycja jest również pusta, ponieważ nie ma wystarczającej liczby wierszy do wypełnienia tej partycji.

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

Wynik:

(0 rows affected)

Jest to zgodne z zaleceniem Microsoftu, aby pozostawić pierwszą i ostatnią partycję pustą, aby uniknąć jakiegokolwiek przenoszenia danych w przypadku podziału lub połączenia partycji w przyszłości.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CHARINDEX() vs PATINDEX() w SQL Server — jaka jest różnica?

  2. Nie można połączyć się z localDB w VS2012 — wystąpił błąd związany z siecią lub specyficzny dla instancji podczas nawiązywania połączenia z SQL Server...

  3. Wskazówki dotyczące przenoszenia bazy danych SQL Server z jednego serwera na drugi — samouczek SQL autorstwa Rajana Singha

  4. 5 nawyków monitorowania baz danych w przypadku udanych administratorów baz danych

  5. Rozmyte dopasowanie przy użyciu T-SQL