| 在使用Oracle的过程,我们就不能考虑性能和SQL优化,而正确的使用索引是优化SQL中的很关键的因素. 如果发现Oracle在有索引的情况下而没有使用索引,这并不是Oracle的优化器出错。在有些情况下Oracle确实会选择全表 对第1种情况最常见的例子,是以下这样的count语句: 对第2种情况一般大家都认为通过索引访问比通过表访问要快,比较难理解的是在哪种情况下全表扫描要比索引扫描快。这就涉及到这么2个概念: 一般的估算公式是:FF * (CF + 索引块个数) [备注:toms 说"the formula used by the CBO to compute the cost is blevel + FF * leaf_blocks + FF * clustering_factor"]由此估计出一个查询如果使用某个索引会需要读入的数据块块数。需要读入的数据块越多,则 cost 越大Oracle 也就越可能不选择使用 index. 其核心就是,CF可能会比实际的数据块数量大。CF受到索引中数据的排列方式影响,通常在索引刚建立时,索引中的记录与表中的记录有良好的对应关系,CF 都很小;在表经过大量的插入/修改操作后,这种对应关系越来越乱,CF也越来越大。这个时候就需要DBA重建该索引。 如果某个SQL语句以前一直使用某个索引,突然有一天,你发现系统慢的不行了,检查发现该SQL语句的某个索引用不上了:其中一个很大的可能就是 CF 已经变得太大,需要重新整理该索引了. FF 则是Oracle 根据分析所做的估计。比如某表有50多万行,其主键的最小值是1,最大值是500000,考虑以下sql 语句: 索引也有的"好坏"之分: |
(转)关于Oracle索引的一点认识
最新推荐文章于 2022-12-11 18:36:05 发布
深入探讨在使用Oracle过程中,正确使用索引对于SQL优化的重要性。解释了Oracle选择全表扫描而非索引扫描的原因,包括分析信息过时、表大小与数据块数等条件。分析了索引的'好坏',指出索引过多或不适用的情况,并阐述了单列索引与复合索引的效率对比。最后,强调了CF(Clustering factor)和FF(Filtering factor)的概念,以及它们如何影响索引的选择。
1290

被折叠的 条评论
为什么被折叠?



