SQLServer索引创建策略——第2部分:离线、并行、非分区(无统计计划(无柱状图))
SQLServer索引创建策略——第2部分:离线、并行、非分区(无统计计划(无柱状图))--王成辉翻译整理,转贴请注明出自微软BI开拓者www.windbi.com
--原帖地址
创建(连续) (写数据到要创建的索引里) | X (合并交换) / | \ 排序… 排序… 排序…(根据索引键排序) | | | 扫描… 扫描… 扫描…(从源里读取数据)
当柱状图不可用时(例如在视图上创建索引时)不能使用前一篇文章里描述的方法(对于收集的统计,可能仅针对真实的对象。要在视图上建索引,此时索引不存在,不能在视图上收集抽样统计,这就是为什么这里有不同的计划)。所以将使用常规的并行扫描,因为根本不知道数据分布情况。工作原理如下:
使用并行扫描并行地扫描源数据,但创建连续的二叉树。每个工作用与前面的并行扫描方式相同的方法扫描堆里的一页。扫描完成时每个工作创建排序表并填充上数据。每个工作维护自己的排序表——所有工作的排序表和数据将合并(由于这些排序表是不独立的,不能创建独立的二叉树并合并它们;必需合并排序表)以产生最后的排序输出结果。然后,由于只有一个最后的输出结果,索引创建操作将是连续的。索引创建器合并交换(Merge Exchange)数据并创建最后的索引。为什么这个计划相对缓慢呢?这是因为是连续的创建索引加上合并交换带来的额外开销引起的。内存考虑:
在并行索引创建的情形下,同时会创建多个排序表,因此基本的内存要求较高,所以内存的计算有点不同。对于内存的计算,考虑1)需要的内存,2)额外的内存。每一个排序需要40个页面的内存需求,假定DOP=2,所以有2个排序表,这就有80个页面的内存需求,但不管DOP的设置如何,总的额外内存保持相同。例如,如果连续计划需要500页的额外内存,那么并行计划也有相同的额外内存需求,每个工作的内存将是额外内存500/DOP个页面加上40个页面的需要内存。上一篇:SQLServer索引创建策略——第2部分:离线、并行、非分区下一篇:SQLServer索引创建策略——第3部分:离线、连续/并行、分区

拓狼 最后编辑于 2007-05-25 13:50:14
虽有智慧,不如乘势;虽有鎡基,不如待时。
君子学以聚之,问以辨之,宽以居之,仁以行之。
独学而无友,则孤陋而寡闻。