You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Maksim Zhuravkov (Jira)" <ji...@apache.org> on 2024/03/12 10:02:00 UTC
[jira] [Updated] (IGNITE-21736) Sql. Do not perform index scan operations for impossible search conditions for numeric literals.
[ https://issues.apache.org/jira/browse/IGNITE-21736?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Maksim Zhuravkov updated IGNITE-21736:
--------------------------------------
Labels: ignite-3 (was: )
> Sql. Do not perform index scan operations for impossible search conditions for numeric literals.
> ------------------------------------------------------------------------------------------------
>
> Key: IGNITE-21736
> URL: https://issues.apache.org/jira/browse/IGNITE-21736
> Project: Ignite
> Issue Type: Improvement
> Components: sql
> Reporter: Maksim Zhuravkov
> Priority: Minor
> Labels: ignite-3
>
> IGNITE-19615 introduced saturated values to overcome a problem in index lookups, caused by the fact that SQL allows implict conversions between numeric types (see examples).
> This approach is not effiecent because instead of immediately returning an empty collection of rows, IndexScanNode performs a look up for TYPE::MAX_VALUE and then applying post condition to remove rows.
> 1. Let's fix remove this redudant lookup by introducing/updating search bounds that represent unsatisfiable/impossible conditions (conditions that never hold true).
> 2. Let's fix code related to introduction of saturated values to use these bounds.
> 3. Update Index*ScanNode, to always produce no row, in cause when they use such bounds.
> Example:
> {code:java}
> SELECT * FROM t WHERE t.tinyint_col = 1111111111
> {code}
> With type annotations:
> {code:java}
> SELECT * FROM t WHERE t.t.tinyint_col (TINYINT) = 1111111111 (INT)
> {code}
> After applying type coercions rules:
> {code:java}
> SELECT * FROM t WHERE CAST(t.tiny_int AS INT) = 1111111111
> // This operation perform as an index look up to returns all rows that have tinyint_col = SHORT::MAX_VALUE
> // and then applies a predicate CAST(tinyint_col) = 1111111111 (to eliminate all results)
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)