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

Hiệu suất đếm SQL (*)

Mikael Eriksson có một lời giải thích hữu ích dưới đây tại sao truy vấn đầu tiên lại nhanh:

Máy chủ SQL tối ưu hóa nó thành:if exists(select * from BookChapters) . Vì vậy, nó sẽ tìm kiếm sự hiện diện của một hàng thay vì đếm tất cả các hàng trong bảng.

Đối với hai truy vấn khác, SQL Server sẽ sử dụng quy tắc sau. Để thực hiện một truy vấn như SELECT COUNT(*) , SQL Server sẽ sử dụng không phân cụm hẹp nhất chỉ mục để đếm các hàng. Nếu bảng không có bất kỳ chỉ mục nào được phân cụm, nó sẽ phải quét bảng.

Ngoài ra, nếu bảng của bạn có nhóm lập chỉ mục, bạn có thể nhận được số lượng của mình nhanh hơn bằng cách sử dụng truy vấn sau (mượn từ trang web này Nhận Số lượng Hàng Nhanh chóng!)

--SQL Server 2005/2008
SELECT OBJECT_NAME(i.id) [Table_Name], i.rowcnt [Row_Count]
FROM sys.sysindexes i WITH (NOLOCK)
WHERE i.indid in (0,1)
ORDER BY i.rowcnt desc

--SQL Server 2000
SELECT OBJECT_NAME(i.id) [Table_Name], i.rows [Row_Count]
FROM sysindexes i (NOLOCK)
WHERE i.indid in (0,1)
ORDER BY i.rows desc

Nó sử dụng bảng hệ thống sysindexes. Bạn có thể tìm thêm thông tin tại đây SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2012

Đây là một liên kết khác Tại sao SELECT COUNT (*) của tôi chạy quá chậm? với một giải pháp khác. Nó cho thấy kỹ thuật mà Microsoft sử dụng để nhanh chóng hiển thị số hàng khi bạn nhấp chuột phải vào bảng và chọn thuộc tính.

select sum (spart.rows)
from sys.partitions spart
where spart.object_id = object_id(’YourTable’)
and spart.index_id < 2

Bạn sẽ thấy rằng điều này trả về rất nhanh chóng cho dù bạn có bao nhiêu bảng.

Nếu bạn vẫn đang sử dụng SQL 2000, bạn có thể sử dụng bảng sysindexes để lấy số.

select max(ROWS)
from sysindexes
where id = object_id(’YourTable’)

Con số này có thể hơi sai tùy thuộc vào tần suất SQL cập nhật bảng sysindexes, nhưng nó thường đúng (hoặc ít nhất là đủ gầ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. Cách tạo bảng trong SQL Server bằng cách sử dụng truy vấn

  2. Sửa lỗi Msg 4151 “Kiểu của đối số đầu tiên đối với NULLIF không thể là hằng số NULL vì kiểu của đối số đầu tiên phải được biết” trong SQL Server

  3. Sự khác biệt giữa bảng tạm thời và biến bảng trong SQL Server là gì?

  4. Bảng nhiều câu lệnh Hàm có giá trị so với Hàm được định giá trong bảng nội tuyến

  5. Node.js MSSQL tedius ConnectionError:Không kết nối được với localhost:1433 - kết nối ECONNREFUSED