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

3 cách trả về số lượng hàng trong mỗi phân vùng trong SQL Server (T-SQL)

Nếu trước đây bạn đã tạo một bảng được phân vùng trong SQL Server và bây giờ bạn muốn biết có bao nhiêu hàng đang được lưu trữ trong mỗi phân vùng, thì đây là ba truy vấn bạn có thể sử dụng.

Đặc biệt, bạn có thể:

  • Truy vấn sys.dm_db_partition_stats xem
  • Truy vấn sys.partitions xem
  • Sử dụng $PARTITION chức năng trong một truy vấn

Dưới đây là các ví dụ về cả ba.

sys.dm_db_partition_stats

sys.dm_db_partition_stats chế độ xem quản lý động hệ thống trả về thông tin số trang và hàng cho mọi phân vùng trong cơ sở dữ liệu hiện tại.

Dưới đây là một ví dụ về việc trả về số hàng của một bảng được phân vùng có tên là Movies .

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           |
+--------------------+-------------+

Trong trường hợp này, phân vùng đầu tiên và cuối cùng trống (theo khuyến nghị của Microsoft).

sys.partitions

sys.partitions dạng xem danh mục hệ thống chứa một hàng cho mỗi phân vùng của tất cả các bảng và hầu hết các loại chỉ mục trong cơ sở dữ liệu.

Đây là cách chúng tôi có thể sử dụng nó để trả về cùng một dữ liệu như trong ví dụ trước.

SELECT
    partition_number,
    rows
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Kết quả:

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

Bạn có thể nhận thấy rằng điều này gần giống với truy vấn trước đó. Sự khác biệt duy nhất là cột này sử dụng cột được gọi là rows , trong khi cái trước sử dụng cột có tên là row_count .

$PARTITIONS

$PARTITIONS hàm hệ thống trả về số phân vùng mà một tập hợp các giá trị cột phân vùng sẽ được ánh xạ cho bất kỳ chức năng phân vùng cụ thể nào.

Do đó, chúng tôi có thể sử dụng thông tin này để tạo một truy vấn trả về dữ liệu số lượng hàng.

SELECT 
    $PARTITION.MoviesPartitionFunction(MovieId) AS [Partition Number],   
    COUNT(*) AS [Number of Rows] 
FROM Movies   
GROUP BY $PARTITION.MoviesPartitionFunction(MovieId)
ORDER BY [Partition Number] ASC

Kết quả:

+--------------------+------------------+
| Partition Number   | Number of Rows   |
|--------------------+------------------|
| 2                  | 100              |
| 3                  | 3979             |
+--------------------+------------------+

Sự khác biệt duy nhất với kết quả của ví dụ này, là nó chỉ trả về số lượng các hàng không trống.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhận các giá trị Tối đa và Tối thiểu từ một Bảng bằng cách sử dụng Hàm Tổng hợp - Hướng dẫn SQL Server / TSQL Phần 129

  2. Cách sys.dm_exec_describe_first_result_set_for_object hoạt động trong SQL Server

  3. Truyền trực tuyến hình ảnh dựa trên dữ liệu bằng HttpHandler

  4. Các cột tổng hợp động trong SQL Server

  5. Thủ tục mong đợi tham số không được cung cấp