我对索引有几个疑问,请高手帮忙解答。
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。加了索引,反而查询慢。
这个问题网上有人说是:
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本身就没有加了索引的字段。为什么也会慢。执行计划不应该加了这个索引啊求教。。!!!
我想知道原理 高手们 简单给我解答解答吧
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货