groonga / grnxx

groonga++
Other
7 stars 0 forks source link

参照を含む式の評価について検討する #134

Open s-yata opened 9 years ago

s-yata commented 9 years ago

概要

参照型のカラム Ref があり,参照先に Name という Text のカラムがあるとき, Ref.Name == "Mike" のような式を評価する方法に関する Issue です.

現在の実装では, Ref.Name を取ってきて "Mike" と等しいかどうかを調べます.

この式を評価するとき, "Mike" と対応する参照先の行 ID を取得できれば, Ref == ID という式に変換できます. すると, Text の比較から Int になり,効率化されそうです.

難しいところは,行 ID の取得に時間がかかると厳しいこと,クエリに該当する行 ID がたくさんあると効率が悪いことなどです. 入力されるレコードが少なければ,単純に評価した方が効率良さそうなことも難しさにつながります.

というわけで,以下のように進めてみようと思います.

  1. Ref.Name == "Mike"Ref == ID で差がどのくらいになるかを確認します.
    • 差があまりないのであれば,この時点で終了します.
  2. どのようなケースで置き換えが有効かを検討します.
    • 索引の有無や参照先テーブルの大きさがポイントになるはずです.
  3. 実装方法を検討します.
    • 簡単に実装できそうであれば,さくっと片付けるのが良いと思います.

直接的にはつながりませんが,少し関連のある Issue があります.

s-yata commented 9 years ago

追記

Ref.Name == "Mike" のような式は,参照先に該当する行が存在しなければ,定数(false)に置き換えられます.

s-yata commented 9 years ago

選択方法

自動的に切り替える案と手動で選択できるようにする案があります. ハイブリッドとして,明らかに切り替えた方が良いときは自動,それ以外は手動という案もあるかと思います.

テストのことを考えれば,手動でできた方が便利そうです. デフォルトでは自動選択にして,必要なときは手動選択というのが理想的です.