Improve SQL queries with IS NULL clause
---------------------------------------

                 Key: NXP-7847
                 URL: https://jira.nuxeo.com/browse/NXP-7847
             Project: Nuxeo Enterprise Platform
          Issue Type: Improvement
          Components: Core SQL Storage
    Affects Versions: 5.4.2
         Environment: PostgreSQL and Oracle
            Reporter: Benoit Delbosc


There are few SQL requests like:

{code}
SELECT hierarchy_id FROM ancestors WHERE ancestors IS NULL;
SELECT id FROM hierarchy_read_acl WHERE acl_id IS NULL;
{code}

They generate sequential scan because index are not used for the NULL value. 
This can be
fixed by adding partial index on PostgreSQL for instance.


{code}
nuxeo=# EXPLAIN ANALYZE SELECT id FROM ancestors WHERE ancestors IS NULL;
                                               QUERY PLAN                       
                         
---------------------------------------------------------------------------------------------------------
 Seq Scan on ancestors  (cost=0.00..2275.76 rows=1 width=37) (actual 
time=11.311..11.470 rows=1 loops=1)
   Filter: (ancestors IS NULL)
 Total runtime: 11.500 ms
(3 rows)

Time: 12.034 ms

nuxeo=# CREATE INDEX ancestors_ancestors_is_null_idx ON ancestors USING 
btree(ancestors) WHERE ancestors IS NULL;
CREATE INDEX
Time: 19.981 ms

nuxeo=# EXPLAIN ANALYZE SELECT id FROM ancestors WHERE ancestors IS NULL;
                                                                 QUERY PLAN     
                                                            
--------------------------------------------------------------------------------------------------------------------------------------------
 Index Scan using ancestors_ancestors_is_null_idx on ancestors  
(cost=0.00..8.27 rows=1 width=37) (actual time=0.046..0.047 rows=1 loops=1)
   Index Cond: (ancestors IS NULL)
 Total runtime: 0.070 ms
(3 rows)

{code}
It's 160x faster with a partial index.


For Oracle this can also be done with an index, but it does not work with 
nested table.
http://www.dba-oracle.com/oracle_tips_null_idx.htm

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        
_______________________________________________
ECM-tickets mailing list
[email protected]
http://lists.nuxeo.com/mailman/listinfo/ecm-tickets

Reply via email to