使用Label类vs定义查询-哪个执行效果最好?


11

对于在ArcSDE中使用存储在ArcSDE地理数据库中的超大数据集的工作,哪一种方法能提供最佳性能?使用复杂的SQL查询标记特定功能的多个标签类,还是使用将相同的复杂SQL查询设置为每一层的定义查询的同一层的多个副本?


2
我认为“同一层的多个副本,每个副本都有自己的定义查询和基于简单字段的标签”将成为我的最爱,但是我没有度量标准来支持这种直觉,所以我认为这是一个很好的问题。用您的说法,具有一百万个多边形的文件地理数据库要素类是否可以视为非常大的数据集?
PolyGeo

Answers:


5

假设标签类上的SQL查询与拆分层上的SQL查询相同,则具有多个标签类的单层方法将更快。为什么?:

ArcMap中的标签将对图层绘制执行一个查询,然后对每个标签类执行一个查询。因此,具有4个标签类的图层将对绘制的所有要素查询一次(1个查询),然后总共查询4次(每个标签类一个或另外4个查询)= 5个查询

如果将各层分开,则每个层将有1个过滤查询(定义查询)(4个查询),而每个标签类将具有相同的查询(另外4个查询)= 8个总查询

在几乎所有情况下,尽管仅取决于查询源,但是5个查询将比8个查询快,尽管它取决于数据源。

请注意,在ArcGIS Server中,缓存用于要素标签,当标签类使用相当标准的SQL而没有供应商特定功能时,极有可能通过一个查询来处理具有4个标签类的1层。


2
但是,在定义查询方案中,我不会创建标签类。它们将仅基于单个字段值进行标记。还是我看错了第三段?
ianbroad

标签类用于标记由SQL where子句定义的功能的子集(与定义查询完全相同),并具有自己的文本符号,标签表达和放置规则。从您的描述中我还不清楚,从类到定义查询的转换如何使您仅可以在单个字段上进行标记。您是在指复杂的标签表达式而不是复杂的SQL查询吗?
Craig Williams

1
不,我只是说这两种情况都没有使用标签表达式。两者都使用单个字段标记。
ianbroad 2014年

4
我在Esri的标签团队工作。我对它的工作原理非常熟悉。查询的调用位置不会影响性能,但是您希望减少查询总数。
克雷格·威廉姆斯

1
我想我现在已经知道您的答案了,克雷格,但是我想知道是否有某种方法可以重新措词以使其更容易理解。我不得不读了几次书才意识到您的数学实际上可能不是我和其他人最初想到的那样错误。
jmpreiks 2014年

2

我使用来自SDE连接的一些NHD数据进行了一些非常简单的测试,发现这两种方法之间的差异很小。

  1. 一层中有7种标签类别,另外还有7种独立的符号体系:36秒
  2. 7个带有定义查询的独立图层,每个图层中没有查询的单个标签类:37秒

一些警告:

  1. 我的测试非常简单,带有简单的标签和简单的查询,应该测试复杂的查询,因为这是问题的一部分。
  2. 总时间中约有三分之一用于绘制符号体系。
  3. 我的时机是秒表,所以误差范围很大。

为您的测试+1。我想知道是否发生标签冲突是否有所不同?也许您可以扩大字体大小,以使许多标签重叠。然后禁用位置重叠标签选项。现在有区别吗?
延斯2014年

1
实际上,我的测试中存在很多标签冲突,因为我必须展示出很大的程度才能获得可以轻松衡量的非常长的处理时间。
jmpreiks 2014年

1
没有“没有标签类”这样的东西,因为总有一个。
2014年

True Craig,我编辑了答案以澄清问题。
jmpreiks 2014年

1

我认为定义查询会更快,因为它是在对象级别而不是在属性数据级别。

您仍然需要测试。但是,我将使用定义查询而不是标签类。


1
是的,请进行测试(如果可以,请进行报告)。我也倾向于定义查询,但是出于可用性性能的原因。标签表达式对话框非常缓慢,并且单击层比def查询层深。它们也更容易在python中获得。
马特·威尔基

如果没有某种技术基础或定量测试,我认为这不能作为答案。它可能会误导某些人。作为对原始问题的评论本来会更好。
jmpreiks 2014年

如果我有能力发表评论,我会做到的。感谢您的不赞成投票。只是想帮忙。
geogeek
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.