您可以基于一个或多个列中的实际值建立列索引。
您还可以针对用户定义的函数从参数返回的一列或多列值创建函数索引。
要点: 数据库服务器对定义函数索引的用户定义的例程 (UDR) 施加了以下限制:
- 参数不能是集合数据类型的列值。
- 函数不能返回大对象(包括内置类型 BLOB、BYTE、CLOB 和 TEXT)。
- 函数不能为 VARIANT 函数。
- 函数不能包含 SQL 的任何 DML 语句。
- 函数必须为 UDR 而非内置函数。然而,您可以创建调用并返回 SQL 内置函数中值的 SPL 包装程序。
此外,请勿使用调用内置 DECRYPT_BINARY( ) 或 DECRYPT_CHAR( ) 函数的任何例程来创建函数索引,该函数可在纯文本中显示已加密数据值。(请勿尝试将任何已加密列中的数据值用作索引键。)
要决定是使用列索引还是使用函数索引,请确定列索引对于要建立索引的数据是否为正确选择。对于典型查询,某些数据类型的列索引可能没有用处。
例如:以下查询询问多少张图像较暗。
SELECT COUNT(*) FROM photos WHERE darkness(picture) > 0.5
对 picture 数据本身的索引并不提高查询性能。
小于、大于和等于的概念对图像数据类型而言并不是很有意义。
然而,使用
darkness() 函数的函数索引却能提高查询性能。
您还可以使用运行频率足够高的用户定义的函数,这样当您基于该函数的值建立索引时,就能够提高性能。