1
0
Fork 0
arangodb/Documentation/Examples/geoIndexFilterOptimization....

57 lines
4.8 KiB
Plaintext

arangosh&gt; db.geoFilter.ensureIndex({ <span class="hljs-attr">type</span>: <span class="hljs-string">"geo"</span>, <span class="hljs-attr">fields</span>: [ <span class="hljs-string">"latitude"</span>, <span class="hljs-string">"longitude"</span> ] });
{
<span class="hljs-string">"bestIndexedLevel"</span> : <span class="hljs-number">17</span>,
<span class="hljs-string">"fields"</span> : [
<span class="hljs-string">"latitude"</span>,
<span class="hljs-string">"longitude"</span>
],
<span class="hljs-string">"geoJson"</span> : <span class="hljs-literal">false</span>,
<span class="hljs-string">"id"</span> : <span class="hljs-string">"geoFilter/83293"</span>,
<span class="hljs-string">"isNewlyCreated"</span> : <span class="hljs-literal">true</span>,
<span class="hljs-string">"maxNumCoverCells"</span> : <span class="hljs-number">8</span>,
<span class="hljs-string">"name"</span> : <span class="hljs-string">"idx_1646382083452436480"</span>,
<span class="hljs-string">"sparse"</span> : <span class="hljs-literal">true</span>,
<span class="hljs-string">"type"</span> : <span class="hljs-string">"geo"</span>,
<span class="hljs-string">"unique"</span> : <span class="hljs-literal">false</span>,
<span class="hljs-string">"worstIndexedLevel"</span> : <span class="hljs-number">4</span>,
<span class="hljs-string">"code"</span> : <span class="hljs-number">201</span>
}
arangosh&gt; <span class="hljs-keyword">for</span> (i = <span class="hljs-number">-90</span>; i &lt;= <span class="hljs-number">90</span>; i += <span class="hljs-number">10</span>) {
........&gt; <span class="hljs-keyword">for</span> (j = <span class="hljs-number">-180</span>; j &lt;= <span class="hljs-number">180</span>; j += <span class="hljs-number">10</span>) {
........&gt; db.geoFilter.save({ <span class="hljs-attr">name</span> : <span class="hljs-string">"Name/"</span> + i + <span class="hljs-string">"/"</span> + j, <span class="hljs-attr">latitude</span> : i, <span class="hljs-attr">longitude</span> : j });
........&gt; }
........&gt; }
arangosh&gt; <span class="hljs-keyword">var</span> query = <span class="hljs-string">"FOR doc in geoFilter FILTER DISTANCE(doc.latitude, doc.longitude, 0, 0) &lt; 2000 RETURN doc"</span>
arangosh&gt; db._explain(query, {}, {<span class="hljs-attr">colors</span>: <span class="hljs-literal">false</span>});
Query <span class="hljs-built_in">String</span> (<span class="hljs-number">89</span> chars, <span class="hljs-attr">cacheable</span>: <span class="hljs-literal">true</span>):
FOR doc <span class="hljs-keyword">in</span> geoFilter FILTER DISTANCE(doc.latitude, doc.longitude, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>) &lt; <span class="hljs-number">2000</span> RETURN doc
Execution plan:
Id NodeType Est. Comment
<span class="hljs-number">1</span> SingletonNode <span class="hljs-number">1</span> * ROOT
<span class="hljs-number">6</span> IndexNode <span class="hljs-number">703</span> - FOR doc IN geoFilter <span class="hljs-comment">/* geo index scan */</span>
<span class="hljs-number">5</span> ReturnNode <span class="hljs-number">703</span> - RETURN doc
Indexes used:
By Name Type Collection Unique Sparse Selectivity Fields Ranges
<span class="hljs-number">6</span> idx_1646382083452436480 geo geoFilter <span class="hljs-literal">false</span> <span class="hljs-literal">true</span> n/a [ <span class="hljs-string">`latitude`</span>, <span class="hljs-string">`longitude`</span> ] (GEO_DISTANCE([ <span class="hljs-number">0</span>, <span class="hljs-number">0</span> ], [ doc.<span class="hljs-string">`longitude`</span>, doc.<span class="hljs-string">`latitude`</span> ]) &lt; <span class="hljs-number">2000</span>)
Optimization rules applied:
Id RuleName
<span class="hljs-number">1</span> geo-index-optimizer
<span class="hljs-number">2</span> remove-unnecessary-calculations<span class="hljs-number">-2</span>
arangosh&gt; db._query(query);
[
{
<span class="hljs-string">"_key"</span> : <span class="hljs-string">"83999"</span>,
<span class="hljs-string">"_id"</span> : <span class="hljs-string">"geoFilter/83999"</span>,
<span class="hljs-string">"_rev"</span> : <span class="hljs-string">"_ZXF6ez---C"</span>,
<span class="hljs-string">"name"</span> : <span class="hljs-string">"Name/0/0"</span>,
<span class="hljs-string">"latitude"</span> : <span class="hljs-number">0</span>,
<span class="hljs-string">"longitude"</span> : <span class="hljs-number">0</span>
}
]
[object ArangoQueryCursor, <span class="hljs-attr">count</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">cached</span>: <span class="hljs-literal">false</span>, <span class="hljs-attr">hasMore</span>: <span class="hljs-literal">false</span>]