Improvement of search for a binary operator

http://archives.postgresql.org/pgsql-patches/2006-04/msg00228.php

'='などの演算子(operator)を、どのように処理するか決める処理を高速化するパッチ。operatorはシステムカタログpg_operatorに登録されており、ユーザーがcreate operatorで登録することもできる。

pg_operatorのprimary keyは以下のようになっている。
・operatorの文字列
・operatorの左右に指定されたデータの型
・現在のセッションのnamespaceのサーチパス

従来の処理:
(1)システムカタログ(pg_operator)を演算子名をキーに検索する。検索結果からnamespaceの優先順位を考慮した演算子のリストを作成する。この処理はOpernameGetCandidate()で実行される。'='などの一般的なoperatorの場合、リストの大きさが50以上になり負荷が大きい。
(2)(1)のリストから、operatorの左右に指定されたデータ型に一致するoperatorを探す。
(3)(2)で見つからない場合、データ型の変換ルールを適用して、リストから一致するoperatorを探す。

OpernameGetCandidateの処理が重いので、(1)と(2)を入れ替える。(2)ではリストを検索する代わりに、演算子名と左右のデータ型をキーにシステムカタログ(pg_operator)を検索する。システムカタログに一致するデータが見つからない場合、(1)と(3)の処理を実行する。