Hi,

I'm curious if there is a reason why "IS NOT DISTINCT FROM" is not an indexable 
operation in a B-tree index, as it is effectively testing for equality albeit 
with some "magic" for NULLs?  Here is an example of what I mean, running tests 
on 9.3.4:

        -- create a table of integers
        CREATE TABLE numbers AS
        SELECT x FROM generate_series(1,1000000) x;

        -- create a b-tree index
        CREATE INDEX numbers_x_idx ON numbers (x);

        -- find x = 500
        SELECT * FROM numbers WHERE x = 500;
          x  
        -----
         500
        (1 row)

        -- query plan
        EXPLAIN SELECT * FROM numbers WHERE x = 500;
                                            QUERY PLAN                          
          
        
----------------------------------------------------------------------------------
         Index Only Scan using numbers_x_idx on numbers  (cost=0.42..8.44 
rows=1 width=4)
           Index Cond: (x = 500)
        (2 rows)


        -- now find x IS NOT DISTINCT FROM 500
        SELECT * FROM numbers WHERE x IS NOT DISTINCT FROM 500;
          x  
        -----
         500
        (1 row)

        -- but the query plan is...
        EXPLAIN SELECT * FROM numbers WHERE x IS NOT DISTINCT FROM 500;
                                QUERY PLAN                         
        -----------------------------------------------------------
         Seq Scan on numbers  (cost=0.00..16925.00 rows=1 width=4)
           Filter: (NOT (x IS DISTINCT FROM 500))

With NULLs being indexable, I was wondering if there was some reason why IS NOT 
DISTINCT FROM could not use the index?

Thanks,

Jonathan

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to