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

SQLServer未使用インデックス

    こんにちは、

    SQL Server DBAは、すべてのインデックスと、使用しているインデックスと使用していないインデックスを監視する必要があります。

    インデックスが使用されていないか、非常にまれに使用されている場合は、SQL Server DBAがインデックスを削除して、データベースに余分な負荷がかからないようにする必要があります。

    次のスクリプトを使用して、すべてのインデックス使用統計を見つけることができます。スクリプトはドロップインデックススクリプトも生成します。このスクリプトを使用して、インデックスを安全にドロップできます。

    SELECT 
    o.name
    , indexname=i.name
    , i.index_id   
    , reads=user_seeks + user_scans + user_lookups   
    , writes =  user_updates   
    , rows = (SELECT SUM(p.rows) FROM sys.partitions p WHERE p.index_id = s.index_id AND s.object_id = p.object_id)
    , CASE
    	WHEN s.user_updates < 1 THEN 100
    	ELSE 1.00 * (s.user_seeks + s.user_scans + s.user_lookups) / s.user_updates
      END AS reads_per_write
    , 'DROP INDEX ' + QUOTENAME(i.name) 
    + ' ON ' + QUOTENAME(c.name) + '.' + QUOTENAME(OBJECT_NAME(s.object_id)) as 'drop statement'
    FROM sys.dm_db_index_usage_stats s  
    INNER JOIN sys.indexes i ON i.index_id = s.index_id AND s.object_id = i.object_id   
    INNER JOIN sys.objects o on s.object_id = o.object_id
    INNER JOIN sys.schemas c on o.schema_id = c.schema_id
    WHERE OBJECTPROPERTY(s.object_id,'IsUserTable') = 1
    AND s.database_id = DB_ID()   
    AND i.type_desc = 'nonclustered'
    AND i.is_primary_key = 0
    AND i.is_unique_constraint = 0
    AND (SELECT SUM(p.rows) FROM sys.partitions p WHERE p.index_id = s.index_id AND s.object_id = p.object_id) > 10000
    ORDER BY reads;
    
    
    


    1. MySQLバージョンを確認する方法

    2. MySQLで--secure-file-privにどのように取り組む必要がありますか?

    3. リンクサーバーでRPC出力が有効になっているかどうかを確認します

    4. SQLで行に番号を付ける方法