MariaDBにてudfを作成したのですが、

生成カラムで利用する際の制限が存在しているようなので記載します。

なお、MariaDBのバージョンは、10.3.13で、

以下のようなudfを作成したとします。

> create function myfunc returns string soname 'myfunc.so';

1.virtualタイプの生成カラム

virtualタイプの生成カラムでは、条件式として使えます。

以下のようなalterをすることができます。

> alter table t1 add column c2 varchar(64) as (myfunc(c1)) virtual;

しかし、c2に対するINDEXを作成することはできません。



2.persistent(stored)タイプの生成カラム

persistentタイプの生成カラムでは、udfを使えません。

当然INDEXも作成できません。



以下のマニュアルにもその旨が記載されていますが、udfを用いたvirtualタイプの生成列にINDEXを作成することができないとは記載されていないような。。

https://mariadb.com/kb/en/library/generated-columns/



実は、この制約は結構痛いなーと感じてます。

udfは、C/C++やらgolangで実装できるので、アプリケーションの処理を通さなければ判定できなかった状態を、データベース側で判定できるようになる、、にも拘わらずINDEXが使えない、つまり高速アクセスできない。。。残念。

また、persistentタイプにも使えないことで、文字列を全文検索用に整形するようなudfを作っても、すごく便利には使えないなどのことが発生してしまう。

(FTSに対応するのは、persistentタイプのみなので)



将来のバージョンアップに期待。



以上


コメントがあればどうぞ


CAPTCHA Image
Reload Image