• <海量数据库解决方案>2011032501


    子查询执行计划
    事实上,不论是位图索引还是B-TREE索引,在包含子查询的任何表连接中都没有太大的差别。

    与B-TREE索引相结合的执行计划

    其他特殊处理的执行计划
    .递归展开(Recursive Implosion)执行计划:递归展开是指在具有循环结构的表中以某一点作为开始点,按照正序或逆序展开其下位结构时所显示出来的执行计划。在Oracle中,就是使用connect by...startwith时所显示的执行计划
    .修改子查询执行计划:在Update语句中,set和where都可以使用子查询,set中使用的子查询被称为“标量子查询”,返回值必为单一值(一个行中的一个值)。
    .特殊类型的执行计划
    ..子查询部分(Subquery Factoring)
    子查询分解是指将由with创建的复杂查询语句存储在临时表中,按照与一般表相同的方式使用临时表的功能。这里,with创建在mssql2000没有,oracle\mssql2005有此语句。
    该方法最大优点就是其复杂查询语句只需要执行一次,但结果可以在统一查询语句中多次使用
    ..特殊的delete子查询
    ..复合表插入(Multi-Table Insert)
    指将一个查询结果行同时插入到多个表中的功能
    ..Having中的子查询
    ..Cube处理
    ..grouping sets处理
    ..rollup处理
    ..merge

    在mssql2000中,有如下运算符:
    cube
    用 CUBE 汇总数据
    CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。

    CUBE 运算符在 SELECT 语句的 GROUP BY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。


    grouping(Oracle的grouping sets在mssql2008中有应用)
    GROUPING
    是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。

    仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。

    语法
    GROUPING ( column_name )

    参数
    column_name

    是 GROUP BY 子句中用于检查 CUBE 或 ROLLUP 空值的列。

    返回类型
    int

    注释
    分组用于区分由 CUBE 和 ROLLUP 返回的空值和标准的空值。作为CUBE 或 ROLLUP 操作结果返回的 NULL 是 NULL 的特殊应用。它在结果集内作为列的占位符,意思是"全体"。

    rollup
    用 ROLLUP 汇总数据
    在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。有关更多信息,请参见用 CUBE 汇总数据。

    CUBE 和 ROLLUP 之间的区别在于:
        CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
        ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
  • 相关阅读:
    Super Mario
    SPOJ Count on a tree
    SPOJ DQUERY
    51nod 区间中第K大的数
    POJ2104 K-th Number
    矩阵模板
    Sasha and Array
    MVC RenderSection
    Lazy Acquisition
    .net4.5 await async 简化之后的异步编程模型
  • 原文地址:https://www.cnblogs.com/GoGoagg/p/1995562.html
Copyright © 2020-2023  润新知