首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在单个查询中删除除主键以外的所有索引

如何在单个查询中删除除主键以外的所有索引
EN

Stack Overflow用户
提问于 2011-09-23 21:56:22
回答 2查看 10.8K关注 0票数 5

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

删除所有不是主键的索引后,计划使用SQL Server事件探查器优化模板作为数据库优化顾问并创建索引。

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

这有多合乎逻辑?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-23 22:09:32

代码语言:javascript
运行
复制
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;
票数 14
EN

Stack Overflow用户

发布于 2011-09-23 22:03:53

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

代码语言:javascript
运行
复制
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'

将这些DROP语句从结果网格复制到新的查询窗口,检查它们,可能还会调整它们,然后运行它们以实际删除索引。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7530103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档