创建函数索引

可以对用户定义的函数构建函数索引。 用户定义的函数可以是外部函数或 SPL 函数。

要对用户定义的函数构建函数索引:

  1. 如果用户定义的函数是外部函数,那么为其编写代码。
  2. 使用 CREATE FUNCTION 语句在数据库中注册用户定义的函数。
  3. 使用 CREATE INDEX 语句构建函数索引。

例如,要对 darkness() 函数创建函数索引:

  1. 为用户定义的 darkness() 函数编写代码,该函数 对其参数数据执行操作,并返回一个十进制值。
  2. 使用 CREATE FUNCTION 语句在数据库中注册用户定义的函数:
    CREATE FUNCTION darkness(im image)
    RETURNS decimal 
    EXTERNAL NAME '/lib/image.so' 
    LANGUAGE C NOT VARIANT
    

    在此示例中,您可以对函数索引使用缺省运算符类,因为 darkness() 函数的返回值是内置数据类型 DECIMAL。

  3. 使用 CREATE INDEX 语句构建函数索引。
    CREATE TABLE photos
    (
            name char(20), 
            picture image 
    ...
    );
    CREATE INDEX dark_ix ON photos (darkness(picture));
    

    在此示例中,假设用户定义的数据类型 image 已定义于数据库中。

现在,如果指定 darkness() 函数作为查询中的过滤器,那么优化器会考虑函数索引:
SELECT count(*) FROM photos WHERE darkness(picture) > 0.5
还可以用用户定义的函数建立一个组合索引。有关更多信息,请参阅使用组合索引
警告: 不要使用 DECRYPT_BINARY() 或 DECRYPT_CHAR() 函数来创建函数索引。这些函数在数据库中存储明文数据,这将达不到加密的目的。有关加密的更多信息,请参阅《GBase 8s 管理员指南》。