ArcSDEジオデータベースに格納された非常に大きなデータセットを使用して、ArcMap内で作業する場合に最高のパフォーマンスを提供するのはどれですか?特定のフィーチャにラベルを付けるために複雑なSQLクエリを使用する複数のラベルクラス、または各レイヤーの定義クエリとして設定される同じ複雑なSQLクエリを使用する同じレイヤーの複数のコピー?
ArcSDEジオデータベースに格納された非常に大きなデータセットを使用して、ArcMap内で作業する場合に最高のパフォーマンスを提供するのはどれですか?特定のフィーチャにラベルを付けるために複雑なSQLクエリを使用する複数のラベルクラス、または各レイヤーの定義クエリとして設定される同じ複雑なSQLクエリを使用する同じレイヤーの複数のコピー?
回答:
ラベルクラスのSQLクエリが分割されたレイヤーのSQLクエリと同じであると仮定すると、複数のラベルクラスを使用したシングルレイヤーアプローチの方が高速になります。なぜ?:
ArcMapのラベリングは、レイヤー描画に対して1つのクエリを実行し、次に各ラベルクラスに対して1つのクエリを実行します。したがって、4つのラベルクラスを持つレイヤーは、描画されたすべてのフィーチャに対して1回(1クエリ)クエリし、合計4回(ラベルクラスごとに1つまたはさらに4つのクエリ)=合計5つのクエリ
レイヤーを分割すると、各レイヤーにフィルターされたクエリ(定義クエリ)が1つ(4つのクエリ)プラス各ラベルクラスに同じクエリ(4つ以上のクエリ)=合計8つのクエリがあります
ほとんどすべての場合、データソースに依存しますが、単純なクエリオーバーヘッドのため、5つのクエリは8つのクエリよりも高速です。
ArcGIS Serverでは、フィーチャラベリングにキャッシュが使用され、ラベルクラスがベンダー固有の機能を持たないかなり標準的なSQLを使用する場合、1つのクエリで4つのラベルクラスを持つ1つのレイヤーが処理される可能性があります。
SDE接続からのNHDデータを使用していくつかの非常に簡単なテストを実行しましたが、どちらの方法にもほとんど違いはありませんでした。
いくつかの注意事項:
定義クエリは、属性データレベルではなくオブジェクトレベルであるため、より高速になると思います。
それでもテストする必要があります。ただし、ラベルクラスではなく定義クエリを使用します。