Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 创建数据库 » 使用数据库对象 » 使用实例化视图

 

实例化视图的限制

创建、初始化、刷新和查看匹配的实例化视图时,以下限制适用:

  • 创建实例化视图时,实例化视图的定义必须明确定义列名称;列定义中不能包括 SELECT * 结构。

  • 创建实例化视图时,其定义中不能包含:

    • 对其它实例化或非实例化视图的引用

    • 对远程表或临时表的引用

    • 变量,如 CURRENT USER;所有表达式必须是确定性表达式

    • 对存储过程、用户定义的函数或外部函数的调用

    • T-SQL 外连接

    • FOR XML 子句

  • 创建实例化视图时,以下数据库选项必须具有指定的设置;否则将返回错误。要使优化程序能够使用该视图,也需要这些数据库选项:

    • ansinull=On
    • conversion_error=On
    • sort_collation=Null
    • string_rtruncation=On
  • 创建实例化视图时,将存储每个视图的以下数据库选项设置。只有连接的当前选项值与为实例化视图存储的值相匹配,该视图才能在优化中使用:

    • date_format
    • date_order
    • default_timestamp_increment
    • first_day_of_week
    • nearest_century
    • precision
    • scale
    • time_format
    • timestamp_format
  • 刷新视图时,将忽略上面列出的所有选项的连接设置。改用数据库选项设置(这些设置必须与视图的存储设置匹配)。

在实例化视图定义中指定 ORDER BY 子句

实例化视图的行不会以任何特定顺序存储,这一点与基表相似;数据库服务器会在计算数据时以最有效的方式对行进行排序。因此,在实例化视图定义中指定 ORDER BY 子句并不会对视图在实现后的行顺序产生必然影响。此外,执行视图匹配时,优化程序也会忽略视图定义中的 ORDER BY 子句。

有关实例化视图和优化程序执行的视图匹配的信息,请参见使用实例化视图提高性能

快速视图的附加限制

手动视图更改为快速视图时,会检查以下限制。如果视图违反任何限制,则会返回错误:

注意

可以使用 sa_materialized_view_can_be_immediate 系统过程检查手动视图是否可以转变为快速视图。请参见sa_materialized_view_can_be_immediate 系统过程

  • 视图必须未初始化。请参见实例化视图状态和属性

  • 视图必须在不可为空的列上有唯一索引。如果没有,则必须添加一个。请参见创建索引

  • 如果视图定义是分组查询,唯一索引列必须与非集合函数的选择列表项对应。

  • 视图定义不能包含:

    • 表达式可为空的 SUM 函数
    • GROUPING SETS 子句
    • CUBE 子句
    • ROLLUP 子句
    • LEFT OUTER JOIN 子句
    • RIGHT OUTER JOIN 子句
    • FULL OUTER JOIN 子句
    • DISTINCT 子句
    • 行限制子句
    • 非确定型表达式
    • 自连接和递归连接
  • 视图定义必须为单一选择项目连接或分组选择项目连接查询块,分组选择项目连接查询块不能包含 HAVING 子句。

  • 分组选择项目连接查询块的选择列表中必须包含 COUNT(*),并且只允许 SUM 和 COUNT 集合函数。

    有关这些结构的说明,请参见实例化视图评估

  • 复杂表达式中不能引用选择列表中的集合函数。例如,在选择列表中不允许 SUM(expression) + 1