小编典典

具有空间索引的可为空的地理列上的SQL Server 2008性能

sql

我在SQL Server 2008上看到一些奇怪的性能问题,其中包含具有空间索引的可为空的地理位置列。每个空值都存储为空间索引内的根节点。

例如,一个表中有5000000个地址,其中存储了4000000个坐标。
每次查询索引时,我都必须扫描每个根节点,这意味着我必须扫描1 000 001级0节点。(所有有效坐标的1个根节点+ 1M空值)

我找不到文档中提到的内容,也看不到为什么如果索引无法处理,SQL为何允许此列为空。

现在,我仅通过将现有坐标存储在单独的表中来绕过此操作,但是我想知道这里的最佳实践是什么?

编辑:(案例关闭)
我在sql空间msdn论坛上获得了一些帮助,并且有一个有关此问题的博客文章:http :
//www.sqlskills.com/BLOGS/BOBB/post/Be-careful-with-EMPTYNULL -values-and-
spatial-indexes.aspx
MSDN文档也确实提到了这一点,但是以一种非常偷偷摸摸的方式。

NULL和空实例的计数为0级,但不会影响性能。级别0将具有与NULL一样多的单元格,并且在基表处具有空实例。对于 地理
索引,级别0将具有与NULL一样多的单元格,而空实例则具有+1单元格,因为查询样本被计为1

文本中没有任何地方保证null不会影响地理性能。假定只有几何形状不受影响。


阅读 223

收藏
2021-03-23

共1个答案

小编典典

只是后续说明-此问题已在Sql Server Denali中使用新的AUTO_GRID索引(现在为默认索引)修复。NULL值将不再在根索引节点中填充。

2021-03-23