Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Отрязване на таблицата и АКТУАЛИЗИРАНЕ на статистика

Статистическите данни не се актуализират автоматично, докато не са необходими отново. известен още като TRUNCATE не го прави. Така че "Не".

Първоначалният отговор беше "Да", защото не е автоматично като част от TRUNCATE. Зависи как четете въпроса :-)

Не забравяйте, че статистиката се актуализира автоматично, когато е необходима за заявка (напр. брой промени на реда). От "Индекс Статистика “ в BOL

Един начин за проверка чрез STATS_DATE ...

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


Редактиране :Исках да съм сигурен :-)

Ще видите, че статистическите данни се актуализират само от изразите SELECT, а не от INSERT, DELETE или 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. Актуализирайте, ако името съществува, else insert - в SQL Server

  2. Запитване за xml в sql сървър 2008

  3. Как да накарам разширението SQLSRV да работи с PHP, тъй като MSSQL е отхвърлен?

  4. Как да получа следващия наличен номер от SQL Server? (Не е колона за самоличност)

  5. SQL Server ПОКАЖЕ ТАБЛИЦИ Еквивалент