Skip to content

Latest commit

 

History

History
31 lines (27 loc) · 1.79 KB

README.md

File metadata and controls

31 lines (27 loc) · 1.79 KB

unionreplacement

Postgresql extension Union Replacement of query OR logics

A very simple example:
SELECT t1.id FROM table1 t1 INNER JOIN table2 t2 ON (t1.id=t2.id) WHERE t1.indexed_col1='value1' OR t2.indexed_col2='value2';

PG nor MRDB would use indexes and the only option to improve the query performance is replacing OR logic with UNION.

This extension achive this from PG server side if the query is hinted:
SELECT t1.id FROM table1 t1 INNER JOIN table2 t2 ON (t1.id=t2.id) WHERE t1.indexed_col1='value1' OR t2.indexed_col2='value2' /*urhint: _1 */;

Installation:
make && sudo make install
add the extension:
shared_preload_libraries = 'your_existing_extensions, unionreplacement'
restart postgresql

sample hints ( format: special_begin_numberofors_terminator )

WHERE cond1 AND (cond2 OR (cond3 OR (cond4 OR cond5))); hint: nesteddoll_and_3
WHERE (cond1 OR cond2 OR cond3) AND cond4;              hint: _(_2_and
WHERE (cond1 OR cond2);                                 hint: _(_1
WHERE cond1 AND (cond2 OR cond2 OR cond3);              hint: _and_3_)
WHERE cond1 OR cond2;                                   hint: _where_1
WHERE cond1 AND (cond2 OR cond3) ORDER BY;              hint: _and_1_order
WHERE cond1 AND (cond2 OR cond3 OR cond4);              hint: _and_2
WHERE cond1 AND ((cond2) OR (cond3) OR (cond4)) ORDER ; hint: bracked_and_2_order
WHERE cond1 AND ((cond2) OR (cond3));                   hint: bracked_and_2
WHERE ((cond1) OR (cond2));                             hint: bracked_(_1
WHERE cond1 AND (cond2 OR cond3) AND cond4;             hint: _and_1_and
WHERE cond0 AND (cond1 OR cond2) AND cond4;             hint: _and_1_)   #if aobve not work