我对索引有几个疑问,请高手帮忙解答。
1。加了索引,反而查询慢。 
这个问题网上有人说是:
 SQL--> 数据库解析该SQL--> 数据库重写该SQL语句,产生等价的SQL语句集(SQL1~SQLn)--> 根据SQL语句集产生执行计划集(PLAN1~PLANn)--> 根据PLAN1~PLANn各自的Cost(成本/开销),   选择最小Cost的Plan执行. 
        其次,加入新索引后,PLAN1~PLANn变了,   某些用到该索引的PLAN的Cost值会较低,   于是Oracle选中它执行。 
        第三,由于Cost是估计值,它本身不准确(即使刚做过Analyze也不准),于是被Oracle选中的Cost值较低的Plan反而较慢。 还有没有其他情况还有 有人说 当数据量大的时候如果查出的结果超过20% 加索引后肯定会慢(慢我知道),但是我想知道具体怎么慢
简单给我说说原理吧。还有我加了无用索引  就是 这个sql本身就没有加了索引的字段。为什么也会慢。执行计划不应该加了这个索引啊求教。。!!!
我想知道原理 高手们 简单给我解答解答吧

解决方案 »

  1.   

    个人感觉,oracle有自己的自动优化机能,比如如果利用索引反而cost更多,或者检索的结果超过20%时,执行计划也可能不走索引,进行全变扫描,所以有时候需要为了优化要强制使用索引检索(/*+ index(table, index)*/等设置)如果一个表存在很多索引,是很不好的习惯,每个索引对表的操作都会有影响的,insert, delete, update,select都会受到影响