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

Số lượng máy chủ SQL chậm

Giá trị gần đúng (bỏ qua bất kỳ giao dịch trên chuyến bay nào) sẽ là:

SELECT SUM(p.rows) FROM sys.partitions AS p
  INNER JOIN sys.tables AS t
  ON p.[object_id] = t.[object_id]
  INNER JOIN sys.schemas AS s
  ON s.[schema_id] = t.[schema_id]
  WHERE t.name = N'myTable'
  AND s.name = N'dbo'
  AND p.index_id IN (0,1);

Điều này sẽ trả về nhanh hơn nhiều so với COUNT(*) và nếu bảng của bạn thay đổi đủ nhanh, thì nó không thực sự kém chính xác hơn - nếu bảng của bạn đã thay đổi giữa thời điểm bạn bắt đầu COUNT (và các ổ khóa đã được thực hiện) và khi nó được trả lại (khi ổ khóa được phát hành và tất cả các giao dịch ghi đang chờ bây giờ được phép ghi vào bảng), nó có giá trị hơn nhiều không? Tôi không nghĩ vậy.

Nếu bạn có một số tập hợp con của bảng mà bạn muốn đếm (giả sử, WHERE some_column IS NULL ), bạn có thể tạo chỉ mục được lọc trên cột đó và cấu trúc mệnh đề where theo cách này hay cách khác, tùy thuộc vào việc nó là ngoại lệ hay quy tắc (vì vậy hãy tạo chỉ mục được lọc trên tập hợp nhỏ hơn). Vì vậy, một trong hai chỉ mục sau:

CREATE INDEX IAmTheException ON dbo.table(some_column)
  WHERE some_column IS NULL;

CREATE INDEX IAmTheRule ON dbo.table(some_column)
  WHERE some_column IS NOT NULL;

Sau đó, bạn có thể nhận được số lượng theo cách tương tự bằng cách sử dụng:

SELECT SUM(p.rows) FROM sys.partitions AS p
  INNER JOIN sys.tables AS t
  ON p.[object_id] = t.[object_id]
  INNER JOIN sys.schemas AS s
  ON s.[schema_id] = t.[schema_id]
  INNER JOIN sys.indexes AS i
  ON p.index_id = i.index_id
  WHERE t.name = N'myTable'
  AND s.name = N'dbo'
  AND i.name = N'IAmTheException' -- or N'IAmTheRule'
  AND p.index_id IN (0,1);

Và nếu bạn muốn biết điều ngược lại, bạn chỉ cần trừ khỏi truy vấn đầu tiên ở trên.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đổi tên khóa chính trong SQL Server (T-SQL)

  2. Cách hoạt động của hàm REPLICATE () trong SQL Server (T-SQL)

  3. Số sau DateTime2 có dành cho mục đích nano giây không?

  4. Số ngày trong tuần trong một phạm vi ngày trong TSQL

  5. Cách cập nhật và đặt hàng bằng ms sql