oracle 性能优化操作十八: 决定使用全表扫描还是使用索引
2015-03-03 12:43
841 查看
【本文转载自:http://blog.csdn.net/helloboat/article/details/42638153,对作者表示感谢。】
和所有的秘笈一样,最后一招都会又回到起点,最后我们来讨论一下是否需要建立索引,也许进行全表扫描更快。
在大多数情况下,全表扫描可能会导致更多的物理磁盘输入输出,但是全表扫描有时又可能会因为高度并行化的存在而执行的更快。
如果查询的表完全没有顺序,那么一个要返回记录数小于10%的查询可能会读取表中大部分的数据块,这样使用索引会使查询效率提高很多。
但是如果表非常有顺序,那么如果查询的记录数大于40%时,可能使用全表扫描更快。
因此,有一个索引范围扫描的总体原则是:
1)对于原始排序的表 仅读取少于表记录数40%的查询应该使用索引范围扫描。反之,读取记录数目多于表记录数的40%的查询应该使用全表扫描。
2)对于未排序的表 仅读取少于表记录数7%的查询应该使用索引范围扫描。反之,读取记录数目多于表记录数的7%的查询应该使用全表扫描。
和所有的秘笈一样,最后一招都会又回到起点,最后我们来讨论一下是否需要建立索引,也许进行全表扫描更快。
在大多数情况下,全表扫描可能会导致更多的物理磁盘输入输出,但是全表扫描有时又可能会因为高度并行化的存在而执行的更快。
如果查询的表完全没有顺序,那么一个要返回记录数小于10%的查询可能会读取表中大部分的数据块,这样使用索引会使查询效率提高很多。
但是如果表非常有顺序,那么如果查询的记录数大于40%时,可能使用全表扫描更快。
因此,有一个索引范围扫描的总体原则是:
1)对于原始排序的表 仅读取少于表记录数40%的查询应该使用索引范围扫描。反之,读取记录数目多于表记录数的40%的查询应该使用全表扫描。
2)对于未排序的表 仅读取少于表记录数7%的查询应该使用索引范围扫描。反之,读取记录数目多于表记录数的7%的查询应该使用全表扫描。
相关文章推荐
- oracle 性能优化操作十八: 决定使用全表扫描还是使用索引
- oracle 性能优化操作十六: 使用分区索引
- oracle 性能优化操作十七: 使用位图索引
- oracle 性能优化操作十七: 使用位图索引
- oracle 性能优化操作十四: 使用基于函数的索引
- oracle优化全表扫描和索引使用
- oracle 性能优化操作十四: 使用基于函数的索引
- oracle 性能优化操作十二: 用Case语句合并多重扫描
- oracle 性能优化操作七:索引提高数据分布不均匀时查询效率
- oracle 性能优化操作八: 利用HINT强制指定索引
- sql语句优化之一:尽量使用索引避免全表扫描
- Oracle中索引的使用 索引性能优化调整
- sql语句优化:尽量使用索引避免全表扫描(1)
- oracle 性能优化操作十三: 使用nls_date_format
- oracle 性能优化操作七:索引提高数据分布不均匀时查询效率
- oracle 性能优化操作九: 屏蔽无用索引
- 数据库查询性能优化(合理使用索引|避免或简化排序|避免对大型表进行全表顺序扫描|避免使用相关的子查询|避免使用通配符匹配 )
- oracle 性能优化操作十五: 基于函数的索引要求等式匹配
- oracle性能优化之原因定位:Oracle为何没使用索引?(转)
- sql语句优化之一:尽量使用索引避免全表扫描