【问题标题】:How can I get it run through all of my databases on server如何让它在服务器上的所有数据库中运行
【发布时间】:2017-04-22 14:18:12
【问题描述】:
SELECT Db_name(database_id) Database_Name 
       ,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_per_write ASC 

【问题讨论】:

标签: sql database indexing


【解决方案1】:
USE master
GO

DECLARE @sql VARCHAR(MAX) =

'
USE [?];

SELECT 
    DB_NAME(database_id) Database_Name, 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_per_write ASC'

 EXEC sp_msforeachdb @sql

【讨论】:

  • 非常感谢你拯救了我的一天
猜你喜欢
  • 1970-01-01
  • 2012-12-16
  • 2014-03-31
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 2019-08-29
  • 2011-04-11
  • 2011-08-12
相关资源
最近更新 更多