Maksim Zhuravkov created IGNITE-21372:
-----------------------------------------

             Summary: Sql. Do not execute queries that guaranteed to return 
none results.
                 Key: IGNITE-21372
                 URL: https://issues.apache.org/jira/browse/IGNITE-21372
             Project: Ignite
          Issue Type: Improvement
          Components: sql
    Affects Versions: 3.0.0-beta2
            Reporter: Maksim Zhuravkov


{code:java}
sql("CREATE TABLE t2 (id INTEGER PRIMARY KEY, val INTEGER)");

// Query that never returns a result:
sql("SELECT * FROM t2 WHERE id IS NULL");

// Plan
IgniteExchange(distribution=[single]): rowcount = 2500.0, cumulative cost = 
IgniteCost [rowCount=12500.0, cpu=42500.0, memory=0.0, io=0.0, 
network=20000.0], id = 28
  IgniteTableScan(table=[[PUBLIC, T2]], tableId=[8], *filters=[false]*, 
requiredColumns=[{0, 1}]): rowcount = 2500.0, cumulative cost = IgniteCost 
[rowCount=10000.0, cpu=40000.0, memory=0.0, io=0.0, network=0.0], id = 25

{code}
Although the optimizer is able deduce that `id is NULL` is always false, since 
id is not nullable, and converted a predicate FALSE, the execution engine still 
runs such a query.

It is possible reduce plans that are guaranteed to produce no results to some 
form of an empty plan, so that the execution engine won't run them and return 
an empty cursor instead.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to