1、最大的问题是体现在向表中插入海量数据时(十几万条左右),速度执行特别慢。甚至进行最简单的查询执行起来都需要一定的时间。我们知道表建立主键后默认建立了索引,其他的该建立索引的也建立的索引。但不起什么作用,是不是哪些地方我们设置的不对呢?2、由于一些主键列按序存放数据,从定义上感觉用“反序”索引比较不错,不知道是否可行?如果可行怎样进行更改?3、还有这样一种现象,我们有一个查询表,用来对查询数据进行临时存储的。当数据库是新的库,数据量比较小时,执行速度还另人满意,但数据量较大(上万)以后,对该表的任何操作都特别慢。然后我们把所有数据清空或仅留一条记录,对该表的操作仍然是特别慢,甚至机器重起无效。不知道是不是Oracle还提供什么样的空间回收机制,或表空间有什么样的设置?
4、在表的信息中,“存储”缓冲池有三个选项:default,recycle,keep。系统默认是default,他们有什么区别?上一个问题中空间回收是否与这个有关系?5、维护索引方面,表的部分主键开始用Vchar类型,后来发现用该种类型选择时,Where条件后不能加多个限制(不知道是否正确,总之我们没用好)。所以现在一律用Nvarchar2类型。不知道该类型是否对索引有影响?还有我们定义数值型用Float型,但Float型也是变长的,在这样的列前面建索引好吗?如果不能建,对数值类型最好定义成什么样的类型?

解决方案 »

  1.   

    插入或更新完大量数据之后要记得“分析”表,不然第一次查询会产生大量重做。这是Oracle的一个问题。
      

  2.   

    1、你说的查询慢是在批量插入中还是插入结束后,如果是插入中,那么很可能是系统资源大部分被插入的会话占用引起的。
    2、你说的反序索引是指reverse吗?reverse索引对于单调增加或减少的列比较合适,因为可以避免索引数据项分布不均,减少索引占用的空间。但如果对索引列存在按范围查询,那么reverse索引就不合适了。对于主键想改为reverse的索引,需要先drop主键,建立reverse索引,再加与索引同名的主键。
    3、你说的清空是用的delete还是truncate,如果是delete,那么空间是不会释放的,必须truncate。
    4、http://community.csdn.net/Expert/topic/4338/4338337.xml?temp=.9060175
    5、“Where条件后不能加多个限制”不知道是出错还是什么?