大多数情况下,我们需要避免SQL在查询时进行全表扫描(FTS),但是对于必须需要进行全表扫描的情况,也可以进行一些优化处理。

即使全表扫描是检索所需数据的唯一可行方法,仍然有多种方法来提升查询性能。优化扫描的技术包括:

1、  通过让表变小来减少扫描所需的逻辑块读取的数量

2、  通过提高数据库IO的效率降低扫描所需要的物理块读取的数量

3、  通过缓存或抽样降低扫描开销

4、  通过使用并行查询选项为扫描分配更多的资源

5、  执行快速全索引扫描来替代全表扫描

6、  对表进行分区,只读取所选择的分区中的数据

特别地,需要完成全表扫描的工作量主要取决于需要扫描的数据块的数量。有很多方法可以减少这个数量。可能需要在进行表设计时,进行合理的估算,然后进行优化设计方面的考虑:

1、  通过重建表来降低HWM (高水位)。

2、  通过修改PCTFREE或者PCTUSED参数向每个块中塞入更多的记录  (请了解pctfree 和pctused 的相关知识)。

3、  减少记录长度,可能是通过将大的且并不经常访问的列迁移到独立的表中

4、  压缩表中的数据。

(转) Oracle SQL优化必要的全表扫描思路分析的更多相关文章

  1. oracle优化:避免全表扫描(高水位线)

    如果我们查询了一条SQL语句,这条SQL语句进行了全表扫描,那到底是扫描了多少个数据块呢?是表有多少数据,就扫描多少块吗?不是的.而是扫描高水位线一下的所有块.有的时候有人经常说,我的表也不大呀,怎么 ...

  2. 记录一次没有收集直方图优化器选择全表扫描导致CPU耗尽

    场景:数据库升级第二天,操作系统CPU使用率接近100%. 查看ash报告: 再看TOP SQL 具体SQL: select count(1) as chipinCount, sum(bets) as ...

  3. Oracle列操作引起的全表扫描

    首先是一种比较明显的情况: select * from table where column + 1 = 2 这里对column进行了列操作,加1以后,与column索引里的内容对不上,导致colum ...

  4. oracle优化:避免全表扫描

    http://blog.csdn.net/onetree2010/article/details/6098259

  5. SQL 数据优化索引建suo避免全表扫描

    首先什么是全表扫描和索引扫描?全表扫描所有数据过一遍才能显示数据结果,索引扫描就是索引,只需要扫描一部分数据就可以得到结果.如果数据没建立索引. 无索引的情况下搜索数据的速度和占用内存就会比用索引的检 ...

  6. 【转】避免全表扫描的sql优化

    对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引: .尝试下面的技巧以避免优化器错选了表扫描:· 使用ANALYZE TABLE tbl_name为扫 ...

  7. 避免全表扫描的sql优化

    对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引:  .尝试下面的技巧以避免优化器错选了表扫描: ·   使用ANALYZE TABLE tbl_na ...

  8. sql语句优化:尽量使用索引避免全表扫描

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  9. [转载]会引起全表扫描的几种SQL

    查询语句的时候尽量避免全表扫描,使用全扫描,索引扫描!会引起全表扫描的几种SQL如下 1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like ‘%... ...

随机推荐

  1. day7_集合,深浅copy

    一.集合 集合是无序的,不重复的数据集合,其元素为可哈希(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键).以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系测试, ...

  2. Django中csrf token验证原理

    我多年没维护的博客园,有一篇初学Django时的笔记,记录了关于django-csrftoekn使用笔记,当时几乎是照抄官网的使用示例,后来工作全是用的flask.博客园也没有维护.直到我的博客收到了 ...

  3. 清空mysql数据

    delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内 ...

  4. Activity的onSaveinstaceState()保存fragment状态

    Activity的onCreat方法: @Override protected void onCreate(Bundle savedInstanceState) { FragmentManager s ...

  5. HTML基础汇总

    一.HTML的概述(了解) a.html是什么 : hypertext markup language 超文本标记语言           超文本:音频,视频,图片称为超文本..           ...

  6. Android 的四大组件都需要在清单文件中注册吗?

    Activity . Service . ContentProvider 如 果 要 使 用 则 必 须 在 AndroidManifest.xml 中 进 行 注 册 , 而BroadcastRec ...

  7. [mysql]SQL语句-新增/修改 创建时间 更新时间

    SQL关键词 要注意大小写   已建表,之前没有创建时间列, 现新增1列创建时间,并设置默认值为当前时间 --添加CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER T ...

  8. STM32Cube填坑,ST link 下载一次以后无法下载

    ST link 下载一次以后无法下载, 原因是工程设置忘记设置Debug模式

  9. mingw 编译 libopus 1.3.1 时 注意事项

    OPUS_STACK_PROTECTOR 默认是使用的, 在 windows 上编译时一定要去掉选项不然 -lopus 链接时出现错误undefined reference to `__stack_c ...

  10. zabbix使用脚本监控

    参照:http://www.cnblogs.com/zhongkai-27/p/9984597.html