Usei este código para criar um índice espacial no 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
Essa consulta é executada em 5 segundos, mas a tabela ITEMS
parece estar bloqueada por horas. No Management Studio, não consigo expandir a pasta Índices ITEMS
e qualquer consulta a essa tabela atinge o tempo limite. Além disso, se eu reiniciar o serviço do SQL Server, o índice espacial que acabei de criar desaparece.
Eu tentei isso no meu banco de dados de produção com 3.000.000 registros e também no meu banco de dados de teste com 300.000 registros com o mesmo resultado.
Isso é normal? O que devo fazer para criar o índice sem travar o banco de dados?