Robert Fitzpatrick <lists@xxxxxxxxxxx> writes: > trax=# explain analyze select * from client_search_id_func(62) left join tblsearch_selections ON search_id = 62 and user_id = 'RF' and ((selected_value = clientno and selection_type = 'client') or (selected_value = contactno and selection_type = 'contact')); I don't think you're going to get anywhere until you get rid of the OR-of-ANDs join condition; the OR defeats using any reasonably intelligent join method such as a merge or hash join. You should redesign the set-returning function to emit a representation that matches the table you want to search, or perhaps rethink the table's representation. regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 4: Have you searched our list archives? http://archives.postgresql.org/