sql >> Database >  >> RDS >> Sqlserver

Truncate Table en UPDATE Statistieken

Statistieken worden niet automatisch bijgewerkt totdat de statistieken weer nodig zijn. oftewel, de TRUNCATE doet het niet. Dus "Nee".

Het oorspronkelijke antwoord was "Ja", omdat het niet automatisch is als onderdeel van TRUNCATE. Het hangt ervan af hoe je de vraag leest :-)

Onthoud dat statistieken automatisch worden bijgewerkt wanneer een zoekopdracht dit nodig heeft (bijv. aantal rijwijzigingen). Van "Indexstatistieken " in BOL

Een manier om te verifiëren met STATS_DATE ...

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


Bewerken :Ik wilde het zeker weten :-)

U zult zien dat statistieken alleen worden bijgewerkt door de SELECT-instructies, niet door de INSERT, DELETE of 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. PHP-vervaldatum

  2. Hoe slaat u statische gegevens op in uw SQL Server Database Project in VS 2012?

  3. Een tabel maken in MySQL bij gebruik van java

  4. Oracle PL/SQL:hoe de stacktracering, pakketnaam en procedurenaam te verkrijgen?