[ 
https://issues.apache.org/jira/browse/IGNITE-4509?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16026316#comment-16026316
 ] 

Sergey Kalashnikov commented on IGNITE-4509:
--------------------------------------------

*Important note*

The implemented approach differs from the one proposed in description/title.
The new approach attempts to derive a set of cache partitions that the given 
query covers 
from the query itself and its arguments. 
The query will be sent to execution only to those cluster nodes which have the 
derived partitions.

Thus if there is a condition in the {{where}} clause of form {{"_key = ?" or 
"affinityKey = ?"}}
the parameter (after binding) or a constant to the right is used to calculate 
the cache partition.

Multiple such conditions may be present. 
Additional non-key filters can be used in query and still the query may be 
optimized this way. 
(f.ex. {{"_key = ? and field = ?"}} as opposed to {{"_key = ? or field = ?"}} 
which cannot be optimized).

The approach does not put any constraints on the {{select expression_list}} 
clause of the query.
However, in the scope of this ticket, the queries with joins are not optimized 
this way (will be done in the scope of 
[https://issues.apache.org/jira/browse/IGNITE-4510]).

The {{cache.get()}} approach was considered not feasible for the following 
reasons:
1) requires specific {{cache.get()}} implementation that would accept a set of 
fields to retrieve,
which is essentially some sort of sql-like implementation;

2) limited application. Only the simplest form of queries can be optimized that 
way, 
i.e. no expressions over columns, no functions, just simplest {{_key=?}};

3) that kind of functionality doesn't fit seemlessly to the flow of sql query 
execution.


> SQL: query with condition on affinity columns and without joins and 
> subqueries can be replaced with GET
> -------------------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-4509
>                 URL: https://issues.apache.org/jira/browse/IGNITE-4509
>             Project: Ignite
>          Issue Type: Task
>          Components: sql
>    Affects Versions: 1.8
>            Reporter: Vladimir Ozerov
>            Assignee: Sergey Kalashnikov
>              Labels: important, performance, sql
>             Fix For: 2.1
>
>
> Simple SQL queries usually demonstrate negative scalability when more nodes 
> are added. 
> Consider the following query:
> {code}
> SELECT * FROM Person p
> WHERE p.id = ?
> {code}
> If {{Person.id}} is affinity field, then query can be replaced with plain 
> {{IgniteCache.get}} or some specialized version of GET, which will return 
> only desired fields. This optimization will guarantee smooth scale with any 
> number of nodes.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to