我使用这段代码在 SQL Server 2008 R2 中创建空间索引:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE SPATIAL INDEX SPATIAL_COMPANIES_GEO ON dbo.ITEMS(GEO) USING GEOGRAPHY_GRID
WITH(
GRIDS = ( LEVEL_1 = HIGH, LEVEL_2 = HIGH, LEVEL_3 = HIGH, LEVEL_4 = HIGH)
, CELLS_PER_OBJECT = 100
, STATISTICS_NORECOMPUTE = OFF
, ALLOW_ROW_LOCKS = ON
, ALLOW_PAGE_LOCKS = ON
)
GO
ALTER TABLE dbo.COMPANIES SET (LOCK_ESCALATION = TABLE)
GO
此查询在 5 秒内执行,但随后表ITEMS
似乎被锁定了几个小时。在 Management Studio 中,我无法展开 Indexes 文件夹,ITEMS
并且对该表的任何查询都会超时。此外,如果我重新启动 SQL Server 服务,我刚刚创建的空间索引就会消失。
我已经在具有 3.000.000 条记录的生产数据库和具有 300.000 条记录的测试数据库上进行了尝试,结果相同。
这是正常的吗?我应该怎么做才能在不锁定数据库的情况下创建索引?