Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pangkas Tabel dan UPDATE Statistik

Statistik tidak diperbarui secara otomatis sampai statistik diperlukan lagi. alias TRUNCATE tidak melakukannya. Jadi "Tidak".

Jawaban aslinya adalah "Ya" karena tidak otomatis sebagai bagian dari TRUNCATE. Itu tergantung bagaimana Anda membaca pertanyaan :-)

Ingat, statistik diperbarui secara otomatis saat dibutuhkan oleh kueri (misalnya jumlah perubahan baris). Dari "Statistik Indeks " dalam BOL

Salah satu cara untuk memverifikasi menggunakan STATS_DATE ...

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


Sunting :Saya ingin memastikan saya :-)

Anda akan melihat statistik hanya diperbarui oleh pernyataan SELECT, bukan INSERT, DELETE, atau 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. Bagaimana cara membuat pengguna baru di SQL Server 2012 yang dapat saya gunakan dalam string koneksi?

  2. Jangan Gunakan sp_depends di SQL Server (Sudah Usang)

  3. Agregat SQL Query mungkin tidak muncul di klausa WHERE

  4. SQL Server 2008 memberikan izin ke information_schema.columns

  5. tsql:Cara mengambil tanggal terakhir setiap bulan antara rentang tanggal yang diberikan