Collection Contents 上一页 下一页 PDF

ASA SQL 用户指南

查询优化与执行

子查询和函数高速缓存


Adaptive Server Anywhere 在处理子查询时会高速缓存结果。这种高速缓存是一个请求一个请求地执行的;并发请求或多个连接决不会共享已高速缓存的结果。如果 Adaptive Server Anywhere 需要为同一组相关值重新计算子查询,它就可以直接从高速缓存中检索结果。如此一来,Adaptive Server Anywhere 就可以避免许多重复和多余的计算。当请求完成(查询的游标关闭)时,Adaptive Server Anywhere 就会释放被高速缓存的值。

在进行查询处理时,Adaptive Server Anywhere 会监视被高速缓存的子查询值的重用频率。如果相关变量的值极少重复,Adaptive Server Anywhere 就只需要将大多数的值计算一次。在这种情况下,Adaptive Server Anywhere 会发现重新计算偶尔出现的重复值比高速缓存大量只出现一次的条目更为有效。因此,服务器将在语句的剩余部分挂起该子查询的高速缓存,而为外部查询块中的每个行重新计算该子查询。

如果相关列的大小大于 255 字节,Adaptive Server Anywhere 也不会进行高速缓存。在这种情况下,您可能需要重写查询或者将另一列添加到表中,以提高这些操作的效率。

函数高速缓存 

一些内置函数和用户定义函数的高速缓存方式与子查询结果的高速缓存方式相同。这样就可以大大改进那些在查询处理过程中用相同参数调用的且占用大量资源的函数。但是,这可能意味着函数的调用次数少于其它情况下的预期调用次数。

对于要高速缓存的函数,它必须满足两个条件:

满足这些条件的函数称为确定型等幂函数。

除了少数几个例外,内置函数均被视为确定型函数。RAND、NEW_ID 和 GET_IDENTITY 函数被视为非确定型函数,它们的结果不进行高速缓存。

除非在创建用户定义函数时将其指定为 NOT DETERMINISTIC,否则会将视其为确定型函数。

有关用户定义的函数的详细信息,请参见 CREATE FUNCTION 语句


Collection Contents 上一页 下一页 PDF