问题已经在标题中,但我会尝试在这里提供一些背景。
我有一个myTable
正在通过 nHibernate 从 Web 应用程序查询的表。它包含 500K 行。时不时地(假设每 15 分钟)我需要刷新此表内容,即删除所有内容并插入另外 500K 行(可能不同)。
免责声明:是的,我知道这不是正确的架构:-) 不过,无论如何我都需要了解这种行为。
由于插入大约需要 60 秒,这就是我这样做的方式:
- 将 500K 行插入
myTable_backup
- 重命名
myTable
为myTable_temp
- 重命名
myTable_backup
为myTable
- 重命名
myTable_temp
为myTable_backup
第 2-4 点旨在快速换桌,因此myTable
几乎总是可用的。
尽管我的意图是最好的,但我在尝试访问时遇到了 SQL 超时myTable
——这或多或少地发生在执行“重命名”的时候。
我的问题是:为什么?
会不会,myTable
因为 500K 插入导致索引仍在其上重建,所以它不可用?尽管它已经设法更改了名称,但仍在进行后台重新索引?
如果是这样,是否可以myTable_backup
在第 1 点和第 2 点之间显式执行重建索引,有帮助吗?
但随后又弹出另一个问题,这是我对本文的官方问题:第 3 点)是否重命名myTable_backup
以myTable
导致索引重建?这对我来说似乎是一个奇怪的想法,但是它可以解释我的超时(索引重建大约需要 10 秒)。
你能帮忙吗?如果您不知道答案,也许您可以建议如何找出答案?
谢谢,PKD