首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重命名表是否会导致索引重新生成?

重命名表是否会导致索引重新生成?
EN

Stack Overflow用户
提问于 2015-08-13 12:43:12
回答 1查看 5.3K关注 0票数 0

题目已经写好了,但我会在这里提供一些背景资料。

我有一个表myTable,它是通过nHibernate从web应用程序中查询的。它包含500 K行。有时(比方说每15分钟一次)。我需要刷新这个表内容,即删除所有内容并插入另一个500 K行(可能不同)。

免责声明:是的,我知道这不是正确的架构:-)无论如何,我需要理解这种行为。

插入大约需要60秒,我就是这样做的:

  1. myTable_backup中插入500 K行
  2. myTable重命名为myTable_temp
  3. myTable_backup重命名为myTable
  4. myTable_temp重命名为myTable_backup

第2-4点是用来快速切换表的,因此myTable几乎总是可用的.

尽管我的意图是最好的,但在尝试访问myTable时,我会得到SQL超时--在执行“重命名”时或多或少会发生这种情况。

我的问题是:为什么?

难道myTable是不可用的,因为由于500 K的插入,索引仍在重建?虽然它已经设法更改了一个名称,但仍然有背景重新索引正在进行吗?

如果是这样,那么在第1点和第2点之间显式执行myTable_backup上的索引是否会有所帮助?

但随后又出现了另一个问题,这是本文的官方问题:( 3)将myTable_backup重命名为myTable是否会导致索引重新生成?对我来说,这似乎是一个奇怪的想法,但是它可以解释我的超时(索引重建大约需要10秒)。

你能帮忙吗?如果你不知道答案,也许你可以建议如何找出答案?

谢谢你,库尔德工人党

EN

回答 1

Stack Overflow用户

发布于 2015-08-16 15:18:29

否,表的重命名不会导致索引重新生成。

但是它将获得一个SCH-M (模式修改)锁,为此它需要等待任何现有的读取器释放他们的锁。

同时,任何新的读取器都必须在SCH-M锁请求之后排队,而不是跳出队列,并有可能使其饥饿。(This is a change in behavior from the previous version)。

您可以检查sys.dm_os_waiting_tasks以查看超时期间发生的等待类型。

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

https://stackoverflow.com/questions/31988610

复制
相关文章

相似问题

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