sql >> データベース >  >> RDS >> Sqlserver

テーブルの切り捨てと統計の更新

    統計が再度必要になるまで、統計は自動的に更新されません。別名、TRUNCATE はそれを行いません。したがって、「いいえ」です。

    TRUNCATEの一部として自動ではないため、元の答えは「はい」でした。質問をどのように読むかによって異なります:-)

    クエリで必要になると、統計が自動的に更新されることに注意してください (行の変更数など)。 「インデックス統計 から "BOL

    STATS_DATE を使用して確認する 1 つの方法 ...

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


    編集 :確認したかった :-)

    統計は、INSERT、DELETE、TRUNCATE ではなく、SELECT ステートメントによってのみ更新されることがわかります

    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. varchar(255)vs tinytext / tinyblobおよびvarchar(65535)vs blob / text

    2. 既存のチェック制約を変更する方法は?

    3. エラーの原因となるVisualBasicログインページ(エラーBC30506 Handles句にはWithEventsが必要です...)

    4. IN句の順序でmysql行を選択する方法