You will probably have to step through debugger for this one.. it really depends on the query. For this query, I expect the query engine to pick one index and run the rest of the criteria on the results of the first index used. My guess is you have created a CompactRangeIndex, and if so, you can see in CompactRangeIndex.java around line 811:
if (ok && runtimeItr != null && iterOps != null) { ok = QueryUtils.applyCondition(iterOps, context); } This is where it would apply the older conditions (B and C or A and C depending on which index was selected) The query engine was modified to try to only use one index if it can. The load from disk (again assuming CompactRangeIndex) is probably occurring in MemoryIndexStore.getTargetObject. On Wed, Aug 30, 2017 at 9:21 AM Roi Apelker <roi.apel...@amdocs.com> wrote: > One more question: > > As I am trying to create a situation where the disk is accessed as least > as possible > (with a select distinct from X where a=1 and b>10 and c=true; > In which a and b are indexes and c is not, and c is in the value which is > evicted to disk) > > Did I get it right - that if I use a hint on a, or a hint on b, or a hint > on both, it will first do a select on the hinted, and ONLY THEN the others? > > Can anyone refer me to the code (where the 2 phase search occurs)? > > Where is the value finally loaded from disk? > > Thank you > > Roi > -----Original Message----- > From: Roi Apelker > Sent: Tuesday, August 29, 2017 4:02 PM > To: dev@geode.apache.org > Subject: RE: Indxes and hints > > Thank you Jason :-) > > -----Original Message----- > From: Jason Huynh [mailto:jhu...@pivotal.io] > Sent: Monday, August 28, 2017 7:24 PM > To: dev@geode.apache.org > Subject: Re: Indxes and hints > > Hi Roi, > > Answers are below the questions... > > Question 1. Is it true to say, that the query as it is will load all the > data values from the file, since the field C is part of the value, which is > already persisted to file? > > Depending on if an index is used or not, if an index is used, the values > that are part of the results will need to be loaded to actually return a > result. If an index is not used, then the all the values would need to be > loaded to actually have something to evaluate the filter criteria on. > > Question 2. If I add a hint on A and B, will it mean that there will be a > "2 phase search", first the select on A and B, and then, only on the > results, on the field C? (this way, not all records will be loaded from > file, only those that suit the A and B condition) > > Depending on the query, it could use one, or more. If it's a query with > only AND clauses, it should just choose one and then evaluate the other > filters on the subset that is returned from the index. > > Question 3. Is it possible to define an index on a value field? (i.e. not > from the key) - will it work exactly like defining one form the key or are > three any limitations? (again, I am looking to overcome the situation, > where as it seems, the records are loaded unnecessarily from disk) > > Yes, indexes can be defined on fields in the value. It will work the same. > > > If you are sure you are already using an index in the query and still > loading every value for every execution of that query, there may be > something weird going on... > > On Sun, Aug 27, 2017 at 2:55 AM Roi Apelker <roi.apel...@amdocs.com> > wrote: > This message and the information contained herein is proprietary and > confidential and subject to the Amdocs policy statement, > > you may review at https://www.amdocs.com/about/email-disclaimer < > https://www.amdocs.com/about/email-disclaimer> > This message and the information contained herein is proprietary and > confidential and subject to the Amdocs policy statement, > > you may review at https://www.amdocs.com/about/email-disclaimer < > https://www.amdocs.com/about/email-disclaimer> >