情况描述:
销售表中send_flag字段表示,是否已上传,0未上传1上传中2已上传。
随着时间的积累,已上传的记录越来越多,现在80W行。
未上传和上传中的记录,基本就是最近几天的销售记录,几百到几千行。
因为每次上传都是取未上传的记录,已上传的没有意思,所以想将send_flag=0和1的记录做到索引里边,而不是将整个表的记录都做到索引里。请教诸位如何实现?
SQL 2K的数据库
销售表中send_flag字段表示,是否已上传,0未上传1上传中2已上传。
随着时间的积累,已上传的记录越来越多,现在80W行。
未上传和上传中的记录,基本就是最近几天的销售记录,几百到几千行。
因为每次上传都是取未上传的记录,已上传的没有意思,所以想将send_flag=0和1的记录做到索引里边,而不是将整个表的记录都做到索引里。请教诸位如何实现?
SQL 2K的数据库
select 1 from sales a,send_flag_0 b where a.sales_code = b.sales_code and b.send_flag <> 2
这条语句需要1分多钟才能出结果。
用优化顾问测试了一下,建议的索引需要50多M。
send_flag字段只是为了上传使用的标志,不至于为它耗用太多资源。
可以根据该语句(send_flag=0,1)分别建立2个聚簇索引视图,因为在你先前的一张表上进行这种操作是不现实的。
--------------------------
索引视图 0.5M 查询速度没变
非聚集索引 28M 原1分钟变为7秒
查询速度提升,问题基本解决。
非常奇怪,索引视图为什么没起作用?
如果索引视图起作用的话,索引不会随着记录的增加会不断变大,这样太棒了。通过Googel结果了解,对于这种情况oracle有成功的解决方法,SQL没有查询到,这表示了oracle的强大吧。
http://zhang41082.itpub.net/post/7167/312506
不好意思,刚接完贴。
为啥oracle能行呢?唉