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

Cắt ngắn Bảng và CẬP NHẬT Thống kê

Số liệu thống kê không được cập nhật tự động cho đến khi cần lại số liệu thống kê. hay còn gọi là TRUNCATE không làm điều đó. Vì vậy, "Không".

Câu trả lời ban đầu là "Có" vì nó không tự động như một phần của TRUNCATE. Nó phụ thuộc vào cách bạn đọc câu hỏi :-)

Hãy nhớ rằng thống kê được cập nhật tự động khi cần thiết bởi một truy vấn (ví dụ:số lượng thay đổi hàng). Từ " Thống kê Chỉ mục "trong BOL

Một cách để xác minh bằng cách sử dụng STATS_DATE ...

SELECT
   name AS index_name, 
   STATS_DATE(object_id, index_id)
FROM
   sys.indexes 
WHERE
   object_id = OBJECT_ID('MyTruncatedTable')


Chỉnh sửa :Tôi muốn chắc chắn rằng :-)

Bạn sẽ thấy số liệu thống kê chỉ được cập nhật bởi các câu lệnh CHỌN, không phải CHÈN, XÓA hoặc TRUNCATE

IF OBJECT_ID('dbo.foo') IS NOT NULL DROP TABLE dbo.foo
CREATE TABLE dbo.foo (
    bar int NOT NULL IDENTITY (1, 1) PRIMARY KEY,
    thing int NOT NULL
)
CREATE INDEX IX_thing ON dbo.foo (thing)

INSERT dbo.foo (thing) SELECT c1.object_id FROM sys.columns c1, sys.columns c2
SELECT
   name AS index_name, 
   STATS_DATE(object_id, index_id) AS AfterLoad
FROM sys.indexes WHERE object_id = OBJECT_ID('dbo.foo')

SELECT DISTINCT thing FROM dbo.foo ORDER BY thing DESC
SELECT
   name AS index_name, 
   STATS_DATE(object_id, index_id) AS AfterFirstQuery
FROM sys.indexes WHERE object_id = OBJECT_ID('dbo.foo')

DELETE TOP (50000) dbo.foo
SELECT
   name AS index_name, 
   STATS_DATE(object_id, index_id) AS AfterDelete
FROM sys.indexes WHERE object_id = OBJECT_ID('dbo.foo')

SELECT DISTINCT thing FROM dbo.foo ORDER BY thing DESC
SELECT
   name AS index_name, 
   STATS_DATE(object_id, index_id) AS After2ndQuery
FROM sys.indexes WHERE object_id = OBJECT_ID('dbo.foo')

TRUNCATE TABLE dbo.foo
SELECT
   name AS index_name, 
   STATS_DATE(object_id, index_id) AS AfterTruncate
FROM sys.indexes WHERE object_id = OBJECT_ID('dbo.foo')

SELECT DISTINCT thing FROM dbo.foo ORDER BY thing DESC
SELECT
   name AS index_name, 
   STATS_DATE(object_id, index_id) AS After3rdQuery
FROM sys.indexes WHERE object_id = OBJECT_ID('dbo.foo')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để sử dụng chuỗi con trong SQL?

  2. Cập nhật thống kê SQL Server bằng cách sử dụng kế hoạch bảo trì cơ sở dữ liệu

  3. Tôi có thể kết nối với Máy chủ SQL bên ngoài mạng của tôi không?

  4. Lỗi kết nối SSIS - Tên tệp không hợp lệ

  5. So sánh các hàng của Tháng hiện tại và Tháng trước trên một cột, SQL Server 2012