You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Is your feature request related to a problem? Please describe.
If a predicate contains or, currently our optimizer failed to push them to storage which leads to poor performance. We can improve the performance by pushing predicate to storage and keep the original predicate on top of the scan.
PS: please note that we need to ensure each arm of the or condition is non-overlap.
createtablet(id intprimary key, name varchar);
-- We should push predicate id = 1 or id = 2 to storage.
explain select*from t where id =1or (id =2and name ='x');
QUERY PLAN
--------------------------------------------------------------------------------------------------
BatchExchange { order: [], dist: Single }
└─BatchFilter { predicate: ((t.id=1:Int32) OR ((t.id=2:Int32) AND (t.name='x':Varchar))) }
└─BatchScan { table: t, columns: [id, name] }
(3 rows)
-- We should push predicate id > 10001 or id = 10000 to storage.select*from t where id >10001or (id =10000and name ='x');
----------------------------------------------------------------------------------------------------------
BatchExchange { order: [], dist: Single }
└─BatchFilter { predicate: ((t.id>10001:Int32) OR ((t.id=10000:Int32) AND (t.name='x':Varchar))) }
└─BatchScan { table: t, columns: [id, name] }
(3 rows)
Describe the solution you'd like
No response
Describe alternatives you've considered
No response
Additional context
No response
The text was updated successfully, but these errors were encountered:
After an offline discussion, this optimization can be achieved in two stages
Split scan range, after transforming ScanRange into common range, the predicate which is not overlap can be split into multiple ScanRange and pushed to storage.
Based on optimization 1, merge multiple ScanRanges to reduce the amount of scan data.
Is your feature request related to a problem? Please describe.
If a predicate contains
or
, currently our optimizer failed to push them to storage which leads to poor performance. We can improve the performance by pushing predicate to storage and keep the original predicate on top of the scan.PS: please note that we need to ensure each arm of the or condition is non-overlap.
Describe the solution you'd like
No response
Describe alternatives you've considered
No response
Additional context
No response
The text was updated successfully, but these errors were encountered: