楼上的仁兄:
“反而有可能变快,因为节省了该特定表的检索时间。”你用了“可能”两个字,你的意思是不是说可能会变慢,也有可能变快,
那这个度是怎么控制的?就是说我update/delete/insert时,什么时候index
该关,什么时候不该关,怎么判断?难道要分析其执行计划?还有,你说对特定的表操作可能快,而同时系统整体的速度有慢了,你的系统的处理速度是什么概念?是cpu和io等能力?我们平常说的系统快慢是通过一个个具体的事务处理速度来体现的?如果有人告诉我,你的某个事务处理的速度很快,可是你的系统很慢时候,你怎么理解?呵呵,我可能有点咬文嚼字了。但还望各位作出解释。

解决方案 »

  1.   

    我用“可能”的意思是我也没有把握,很多方面对一个特定的表的处理速度有影响。
    例1:系统中正在有n个无索引的表在频繁更新
    例2:系统中正在有n个有索引的表在频繁更新
    对例1来说,例2要占用系统更多的cpu和内存资源来进行索引的维护。系统中其它的进程必然会受到影响。
      

  2.   

    呵呵,那我是否可以这么说,
    如果我想对一个百万级或者是千万级的表作update/delete/insert操作时,
    并且我知道我在操作的同时不会有别人在对该表作类似的操作,还有就是我对这个表的操作不是很频繁,那么这个时候我使用索引应该是比较高效的是吧?
    因为我们直观的总是更多的是关心我们正在操作的事务的速度。
      

  3.   


    经常看到“如果是对大表应该是把表上的所有index都关掉,等数据处理完再打开”类似的话,是不是大家的理解也有偏差?还是大家根本也是如楼上大哥所说的,他们都是考虑的是系统的整体速度?
      

  4.   

    呵呵index是为了带来查询速度的提升的
    如果你仅仅是insert
    我想有索引应该比没有索引慢但如果是delete and  update就要分情况了:
    大表下
    1:如果delete或者update一条,有索引肯定快的多
    因为这个时候需要先定位该条记录啊,如果没有索引,oracle得进行全表扫描才能确定一条记录啊2:当update和delete的记录达到表数据的某个比例之后,有索引可能就慢了
    但到底比例多大,只能根据实际检验,不能空说书上说查询比例达到20%以上就不使用索引而是full scan
    但这得有analyze的基础上并且在cost模式下才行的
    关于最后一问:
    典型的例子就是,比如使用sqlldr导入大量数据
    这个时候往往drop  index
    等数据导完后再创建索引因为索引不光有维护的问题
    生成索引的时候需要大量资源的,占用 ram(data buffer and sort_area_size)/cpu/临时表空间