<海量数据库解决方案>2011050601

【摘抄】

向局部范围扫描引导的方法

&利用访问路径实现对sort的代替
    不论是一般索引还是聚簇索引都按照索引列值进行了排序
    索引列序也是能否实现局部范围扫描的一个非常重要的前提条件
   
&只使用索引的局部范围扫描
    索引只在查找第一个满足条件的索引行时发生随机读取,之后执行的是连续扫描,但是从表中读取数据始终都是按照随机方式进行的。

&灵活使用min、max局部范围扫描
    对应的章节仅仅描述“MAX,MIN的处理”,暂时没有发现怎么利用MAX,MIN来局部范围扫描

&filter型局部范围扫描
    一般采用Exists来过滤,但不是唯一的
   
&利用rownum的局部范围扫描
    Rownum并不是物理存储在表中的列,而是一种像SYSDATE或USER等一样可以被使用在任何SQL语句中的虚拟列。{在Oracle中}
    Rownum并不是被读取行的编号,而是满足查询条件最终结果行的流水号。
    个人觉得:在Sql2K中,大部分可以使用Set RowCount Num来设置查询的输出条数。但是没有Rownum的灵活使用方式,比如where Rownum = 10之类的写法。Set RowCount Num效果类似这样的Where Rownum <= Num。【注意,msSQL和Oracle的语法肯定不同,只是比对学习而已】

&利用嵌套视图的局部范围扫描
    运用嵌套视图来实现局部范围扫描的原理:
    将必须使用全部范围扫描的部分捆绑在嵌套视图中,以确保视图之外的部分能够以局部范围扫描方式来执行。

&利用函数的局部范围扫描
    关于此节信息,书中讲解了些,但不容易理解。个人建议:使用db自带的内部函数,而非用户自定义函数。
    另外,函数每次只返回一个值;当然可以用串接字符串和分解字符串来处理,这部分的函数也是内部函数,效率另算。

&利用查询语句二元化特征的局部范围扫描
    关于此节数据,有些语法仅在ORACLE上;在msSql没有对应的。
    书中对查询语句二元化特征的范例,暂时没有理会到精要,后续继续阅读

&web留言板中的局部范围扫描
    此节讲解的是如何提高数据提取速度
    方案:
    1.使用索引替代排序来实现按照局部范围扫描,并直接输出指定结果
    2.利用Rownum来指定要求输出的行数并中止执行
    3.连锁执行计划,是指在驱动查询条件由or或in运算符构成时,将整个sql分解成多个独立sql以实现单独读取,并将结果进行合并后输出。
   
    关于此节内容,和实践有关系,上述方案可根据实际来使用~




【需要不断阅读并在工作中实践~】


posted @ 2011-05-06 09:40  西就东城  阅读(494)  评论(0编辑  收藏  举报