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

时间:2011-02-10 08:32:34

标签: sql sql-server-2008 null spatial

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

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

我在文档中找不到这个,我不明白为什么如果索引无法处理它,SQL允许此列可以为空。

现在我通过仅将现有坐标存储在一个单独的表中来绕过这个,但我想知道这里的最佳做法是什么?

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

  

计算NULL和空实例   在0级但不会影响   性能。 0级将拥有尽可能多的   cell为NULL,空实例为   基表。对于地理索引,   级别0将包含尽可能多的单元格   NULL和空实例+1单元格,   因为查询样本计为   1

在文中没有任何地方承诺空值不会影响地理位置的性能。 只有几何体应该不受影响。

1 个答案:

答案 0 :(得分:3)

只是一个后续注释 - 此问题已在Sql Server Denali中修复,并带有新的AUTO_GRID索引(现在是默认值)。将不再在根索引节点中填充NULL值。