我有一个表格(表格2),其中包含一些存储为地理数据类型的区域(多边形)。该表包含1529行。在另一个表格(Table1)中,我有约。 22000行,每行都有一个X/Y,我可以从中创建存储在地理栏中的点。SQL Server空间查询优化
我需要做一个空间连接来找出每个点属于哪个区域。我在两个表上都创建了空间索引,但我认为查询太慢了。现在,它需要约72秒,以使加入的是这样的:
SELECT ...
FROM [DatabaseA].dbo.Table1 t1
INNER JOIN [DatabaseB].dbo.Table2 t2 ON t1.Geo.STIntersects(t2.Geo) = 1
WHERE t2.ObjectTypeId = 1 AND t2.CompanyId = 3
请注意,这两个表在不同的数据库,但在同一台服务器上。
在创建空间索引之前,查询速度非常慢,我可以看到正在使用该索引。但是,在table2上创建索引不会影响性能,只有table1上的索引会提供更好的性能。两个指数具有较高的水平格栅
当我看的执行计划,我注意到一个筛选一部分花费的时间71%:
CASE WHEN [Expr1015]>(2) THEN CASE WHEN [Expr1016]=[Expr1017] THEN (1) ELSE (0) END ELSE [DatabaseA].[dbo].[Table1].[Geo] as [t].[Geo].STIntersects([DatabaseB].[dbo].[Table2].[Geo] as [g].[Geo]) END=(1)
所以,我的问题是:
若本查询需要这么久? 我应该使用其他网格尺寸吗? 那个过滤器表达式是什么意思?
有没有人有提示优化呢?
与许多问题非常相似,请参阅我对此的回应:http:// stackoverflow。COM /问题/ 7655408/SQL的空间加入/ 7672934#7672934 – CatchingMonkey
SQL Server 2008或2012? – AakashM
@CatchingMonkey:正如我写的,该指数已被使用,因此增加了一丝不上的表现有所帮助。 – user1632306