如何使用单个查询删除除主键之外的所有索引

Mon*_*RPG 4 sql-server indexing sql-server-2008-r2

我打算删除除主键之外的所有索引.我自己制作了主键,但所有其他索引都是SQL Server的建议.

删除所有非主键的索引后,计划使用SQL Server探查器调整模板进行数据库优化顾问并创建索引.

通过这种方式计划不使用未使用的索引或性能降级索引.

这有多合乎逻辑?谢谢.

Aar*_*and 13

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'DROP INDEX ' 
    + QUOTENAME(SCHEMA_NAME(o.[schema_id]))
    + '.' + QUOTENAME(o.name) 
    + '.' + QUOTENAME(i.name) + ';'
    FROM sys.indexes AS i
    INNER JOIN sys.tables AS o
    ON i.[object_id] = o.[object_id]
WHERE i.is_primary_key = 0
AND i.index_id <> 0
AND o.is_ms_shipped = 0;

PRINT @sql;
-- EXEC sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 5

最简单的方法可能就是:运行此查询,它将输出一个DROP INDEX .....语句列表.

SELECT 
   'DROP INDEX ' + name + ' ON ' + 
   OBJECT_SCHEMA_NAME(object_id) + '.' + OBJECT_NAME(object_Id) 
FROM sys.indexes
WHERE is_primary_key = 0
AND name IS NOT NULL
AND OBJECT_SCHEMA_NAME(object_id) <> 'sys'
Run Code Online (Sandbox Code Playgroud)

将那些DROP语句从结果网格复制到一个新的查询窗口,检查它们,然后调整它们,然后运行它们以实际删除索引.