再帰SQLをかじってみた。

、、、が微妙に使いみちがわからぬ。

親IDをカラムに持つテーブルを用意して、ようはツリー構造をテーブルに格納している場合に便利という説明をよくみるけどね。

今後使うことあるかなー。

実は、ngram(bigram)な検索システムを作りたいと思ってて、
文書テーブルとbigramのテーブルを用意し、再帰SQLを使ってbigramを辿って一致したものを結果にするというSQLを作って、パフォーマンスを測った。
LIKE検索よりも断然良くってでうウホウホしてた。

再帰SQL Total runtime: 1.596 ms
LIKE検索 Total runtime: 22.275 ms


でも今日再帰SQLを使う必要さえないなと気づいてやってみたら、むしろ圧倒的に早かったのでガッカリした。

再帰でないSQL Total runtime: 0.419 ms

でもま、再帰SQLの勉強にもなったし、
無駄ではなかった。


[追記]
あいまい検索というものもやりようによってはbigramでできるらしい。
渡されたキーワードをbigramに分割してそれをつかえばいいという点、鱗から目だった。

[追記]
再帰SQLフィボナッチ数列

with recursive rec (n, a, fibo) as (
  select 1, 0, 1
  union all
  select n+1, fibo, fibo + a from rec
)
select n, fibo from rec limit 30;