Vladimir Ozerov commented on IGNITE-7167:

Regarding MVCC - when doing COUNT(*) you should count only elements visible to 
your MVCC counter. The only way to achieve this is counting elements 
one-by-one, filtering out the following entries:
1) Entries for not-yet committed transactions
2) Entries for aborted transactions
3) Entries for newer committed transactions which are not visible to current 

Certain optimizations exist, such as aggregating visibility info on per-block 
level, but in general case we still resort to a kind of iteration over some 
elements (tuple or block), rather than reading a single number.

NB: When MVCC is enabled {{IgniteCache.size()}} would also likely be O(N) 
operation rather than O(1).

> Optimize 'select count(*) from Table'
> -------------------------------------
>                 Key: IGNITE-7167
>                 URL: https://issues.apache.org/jira/browse/IGNITE-7167
>             Project: Ignite
>          Issue Type: Improvement
>          Components: sql
>    Affects Versions: 2.3
>            Reporter: Valentin Kulichenko
>            Priority: Major
> Currently query like {{select count(*) from Table}} effectively scans the 
> cache and take a lot of time for large datasets. Probably makes sense to 
> optimize it to use {{IgniteCache#size}} directly when possible.

This message was sent by Atlassian JIRA

Reply via email to