Hi Menashè,

> 1. In which cases the "applying index" phrase should I see in the query plan?

There is no simple answer to that question. The query optimizer tries
to select a query plan that is evaluated faster than others. The
following query may illustrate this:

  for $p in db:open('db')//person
  where $p/country = 'Italy'
  and $p/sex = 'female'
  return $p

There are at least three ways how this query could e.g. be rewritten:

  db:text('db', 'Italy')/parent::country/
    parent:person/person[sex = 'female']

  db:text('db', 'female')/parent:sex/
    parent::person[city = 'Catania']

  (db:text('db', 'Italy')/parent::country,
   db:text('db', 'female')/parent::sex)/parent::country

In most cases, only one index access will be created will be created
for queries of that pattern. The optimizer also checks the number of
index entries given for a particular keyword. In the given case, the
query would most probably rewritten to the first query plan.

If you have a query with just six conditions, there are more than 50
different ways how your final query plan could look like.

> 2. Only once a value which is mentioned in the query is found in the index, in
> case of "=" condition?

In most cases, exact queries are preferred, because they are usually
more selective than other queries.

> 3. Always, in case of "<" or "<" condition, assuming the specific
> text/attribute has been indexed?

Because none of our index structures is particularly suited for range
queries, such index-driven requests may be slower than sequential
scans. Maybe you remember my last mail: Have you already tried to
store latitudes and longitudes in a fixed-size string representation?

> 4. Everything I see as a reply to index:facets is indexed, right?

I'm not sure what you mean by that?

Reply via email to