我可以在不影响性能的情况下向索引添加“包含的列”吗?

Joe*_*ips 2 index sql-server-2008-r2

我有一个包含 6300 万个叶级行的非聚集索引。目前它没有任何包含的列。我想在网站在线时添加一个包含的列。如果我通过 SSMS GUI 执行此操作,这会显着影响性能吗?

Rem*_*anu 8

你为什么要通过 SSMS GUI做任何事情???

尝试通过脚本以专业人士的身份进行操作。您最好的选择是使用 drop existing 在线创建索引,在此过程中更改定义以匹配新的所需架构:

create index ... on ... include ... with (online = on, drop_existing = on);
Run Code Online (Sandbox Code Playgroud)

显然,这受制于 ONLINE 操作的通常限制,并且会导致由 ONLINE 索引创建/重建操作引起的正常开销。但好消息是该操作将在线进行,不会阻塞现有查询,并且在构建新索引时旧索引可用于查询。最后会有一个查询耗尽阶段,当索引被交换时所有查询都会阻塞,但这应该是一个非常快的操作(只要没有长时间运行的用户事务阻塞交换本身)。

  • +1 表示“以专业人士的身份通过脚本进行操作”。可重复性总是一件好事。 (2认同)