Hi,
when i read source code of the part of nbtree, i detected another kind of 
contradictory case postgresql has not eliminated 
(eg. x >4 and x <3) in the function _bt_preprocess_keys in nbtutils.c. this 
cause next unnecessary index scan and qual evaluation.
it seems no one will write SQL like that, but maybe it generated from the ec or 
degenerate qual. 
the function just invoked in function _bt_first during initializing index scan, 
so it’s cheap to eliminate this case in the function.
we just pay attention on the opposite operator, so there are four detailed 
cases (ie. x >4 and x <3 , x >4 and x <=3, x >=4 and x <3, x >=4 and x <=3).
when test the case is contradictory or not, it's need to use the more 
restrictive operator when less and more restrictive operator both appeared, 
case like x >4 and x <=4, if we choose <=, 4 <= 4 is satisfied, actually x >4 
and x <=4 is contradictory. 
when >= with <= or > with <, it's ok to pick any one of them.
i have added this feature in my local environment and tested. but i am not sure 
it's worth to spend more effort on it. 


bigbro...@hotmail.com

Reply via email to