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