Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tìm hiểu xem một bảng có được phân vùng trong SQL Server (T-SQL) hay không

Nếu bạn cần tìm hiểu xem một bảng đã được phân vùng trong SQL Server hay chưa, bạn có thể chạy một phép nối với sys.tables , sys.indexessys.partition_schemes lượt xem.

Ví dụ

Đây là một ví dụ để chứng minh.

SELECT
    t.name AS [Table],
    i.name AS [Index],
    i.type_desc,
    i.is_primary_key,
    ps.name AS [Partition Scheme]
FROM sys.tables t
INNER JOIN sys.indexes i
    ON t.object_id = i.object_id
    AND i.type IN (0,1)
INNER JOIN sys.partition_schemes ps   
    ON i.data_space_id = ps.data_space_id
WHERE t.name = 'Movies';

Kết quả:

+---------+------------------------------+-------------+------------------+-----------------------+
| Table   | Index                        | type_desc   | is_primary_key   | Partition Scheme      |
|---------+------------------------------+-------------+------------------+-----------------------|
| Movies  | PK__Movies__4BD2941AD44D2FCF | CLUSTERED   | 1                | MoviesPartitionScheme |
+---------+------------------------------+-------------+------------------+-----------------------+

Ở đây, nó lại sử dụng đầu ra theo chiều dọc (để bạn không phải cuộn sang ngang):

Table            | Movies
Index            | PK__Movies__4BD2941AD44D2FCF
type_desc        | CLUSTERED
is_primary_key   | 1
Partition Scheme | MoviesPartitionScheme

Tôi chỉ trả về một tập hợp con nhỏ của các cột thực tế, nhưng bạn có thể trả lại bất kỳ cột nào mà bạn quan tâm.

Ngoài ra, bạn có thể xóa dòng cuối cùng để trả về tất cả các bảng được phân vùng.

SELECT
    t.name AS [Table],
    i.name AS [Index],
    i.type_desc,
    i.is_primary_key,
    ps.name AS [Partition Scheme]
FROM sys.tables t
INNER JOIN sys.indexes i
    ON t.object_id = i.object_id
    AND i.type IN (0,1)
INNER JOIN sys.partition_schemes ps   
    ON i.data_space_id = ps.data_space_id;

Kết quả:

+---------+------------------------------+-------------+------------------+-----------------------+
| Table   | Index                        | type_desc   | is_primary_key   | Partition Scheme      |
|---------+------------------------------+-------------+------------------+-----------------------|
| Movies  | PK__Movies__4BD2941AD44D2FCF | CLUSTERED   | 1                | MoviesPartitionScheme |
+---------+------------------------------+-------------+------------------+-----------------------+

Trong trường hợp của tôi, chỉ có một bảng được phân vùng trong cơ sở dữ liệu.

Chỉ cần rõ ràng, điều này chỉ trả về các bảng đã được phân vùng rõ ràng.

Trả lại các phân vùng

Bạn cũng có thể truy vấn các dạng xem khác, chẳng hạn như sys.partitionssys.dm_db_partition_stats để trả về danh sách các phân vùng cho mỗi bảng.

Lưu ý rằng cả hai chế độ xem này cũng sẽ trả về các bảng chưa được phân vùng rõ ràng (tức là chúng chỉ có một phân vùng). Trong SQL Server, các bảng và dạng xem chưa được phân vùng rõ ràng vẫn có một phân vùng (partition_number =1).

Đây là một ví dụ về sys.dm_db_partition_stats :

SELECT 
    partition_number,
    row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Movies');

Kết quả:

+--------------------+-------------+
| partition_number   | row_count   |
|--------------------+-------------|
| 1                  | 0           |
| 2                  | 100         |
| 3                  | 3979        |
| 4                  | 0           |
+--------------------+-------------+

Đây là một ví dụ mà tôi trả về thông tin phân vùng cho một bảng không được phân vùng.

SELECT 
    partition_number,
    row_count
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID('Cats');

Kết quả:

+--------------------+-------------+
| partition_number   | row_count   |
|--------------------+-------------|
| 1                  | 3           |
+--------------------+-------------+

Như đã đề cập, nó vẫn có một phân vùng và partition_number của nó là 1 .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Liệt kê tất cả các cột danh tính trong cơ sở dữ liệu máy chủ SQL:sys.identity_columns

  2. Tính năng bảo mật đám mây Spotlight - Xóa chữ viết

  3. Kho lưu trữ dữ liệu tốt nhất cho hàng tỷ hàng

  4. Sự khác biệt giữa chỉ mục được phân nhóm và không được phân nhóm là gì?

  5. Đổi tên khóa ngoại trong SQL Server bằng T-SQL