情况描述:
销售表中send_flag字段表示,是否已上传,0未上传1上传中2已上传。
随着时间的积累,已上传的记录越来越多,现在80W行。
未上传和上传中的记录,基本就是最近几天的销售记录,几百到几千行。
因为每次上传都是取未上传的记录,已上传的没有意思,所以想将send_flag=0和1的记录做到索引里边,而不是将整个表的记录都做到索引里。请教诸位如何实现?
SQL 2K的数据库

解决方案 »

  1.   

    不过可以对 send_flag=0 1 的纪录做索引视图
      

  2.   

    就是为了提高速度
    select 1 from sales a,send_flag_0 b where a.sales_code = b.sales_code and b.send_flag <> 2 
    这条语句需要1分多钟才能出结果。
    用优化顾问测试了一下,建议的索引需要50多M。
      

  3.   

    聚集索引不显示,因为销售单号和行号已经建立主键了。
    send_flag字段只是为了上传使用的标志,不至于为它耗用太多资源。
      

  4.   


    可以根据该语句(send_flag=0,1)分别建立2个聚簇索引视图,因为在你先前的一张表上进行这种操作是不现实的。
      

  5.   

    实测结果:处理方式     大小      效果
    --------------------------
    索引视图     0.5M   查询速度没变
    非聚集索引   28M    原1分钟变为7秒
    查询速度提升,问题基本解决。
    非常奇怪,索引视图为什么没起作用?
    如果索引视图起作用的话,索引不会随着记录的增加会不断变大,这样太棒了。通过Googel结果了解,对于这种情况oracle有成功的解决方法,SQL没有查询到,这表示了oracle的强大吧。
    http://zhang41082.itpub.net/post/7167/312506
      

  6.   

    to dawugui
    不好意思,刚接完贴。
    为啥oracle能行呢?唉