表里有索引,为什么还都是全表扫描?
http://www.itpub.net/thread-421134-1-1.html
这是有CBO根据执行计划的成本决定的
exec dbms_stats.gather_table_stats(ownname='test',tabname=>'dept',cascade=>true);
用/*+ index(table_name index_name) */的HINT来强制走索引。
如:select /*+ index(emp pk_emp) */ from emp where empno=7934;
前提是你要了解应用,知道哪些语句走索引比较高效,否则效果适得其反。
===========
http://space.itpub.net/519536/viewspace-612715
有没有想过,她是怎么做到的呢?
背后的原理是什么呢?
举一个非常好理解的场景(scenario:通过索引读取表中20%的数据)解释一下这个有趣的概念:
假设一张表含有10万行数据--------100000行
我们要读取其中20%(2万)行数据----20000行
表中每行数据大小80字节----------80bytes
数据库中的数据块大小8K----------8000bytes
所以有以下结果:
每个数据块包含100行数据---------100行
这张表一共有1000个数据块--------1000块
上面列出了一系列浅显易懂的数据,我们挖掘一下这些数据后面的故事:
通过索引读取20000行数据 = 约20000个table access by rowid = 需要处理20000个块来执行这个查询
但是,请大家注意:整个表只有1000个块!
所以:如果按照索引读取全部的数据的20%相当于将整张表平均读取了20次!!So,这种情况下直接读取整张表的效率会更高。很幸运,Oracle也是这么想的:)
-- The End --
表里有索引,为什么还都是全表扫描?相关推荐
- mysql limit会扫描全表_为什么用了limit还会进行全表扫描?
你的位置: 问答吧 -> PHP -> 问题详情 为什么用了limit还会进行全表扫描? 现有一张100万行记录的表test, 执行以下语句后: explain select * ...
- 索引法则--LIKE以%开头会导致索引失效进而转向全表扫描(使用覆盖索引解决)...
Mysql 系列文章主页 =============== 1 准备数据 1.1 建表 DROP TABLE IF EXISTS staff; CREATE TABLE IF NOT EXISTS st ...
- 什么情况导致全表扫描,而不是用索引 收藏
1.不要使用in操作符,这样数据库会进行全表扫描, 推荐方案:在业务密集的SQL当中尽量不采用IN操作符 2.not in 使用not in也不会走索引 推荐方案:用not exists或者(外联 ...
- oracle sql 分区查询语句_oracle11g 表分区后的查询语句如何知道是否进行了全表扫描...
2019-05-10 回答 1. 对返回的行无任何限定条件,即没有where 子句 2. 未对数据表与任何索引主列相对应的行限定条件 例如:在city-state-zip列创建了三列复合索引,那么仅对 ...
- MongoDB 定位 oplog 必须全表扫描吗?
MongoDB oplog (类似于 MySQL binlog) 记录数据库的所有修改操作,除了用于主备同步:oplog 还能玩出很多花样,比如 全量备份 + 增量备份所有的 oplog,就能实现 M ...
- MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析...
文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...
- mysql没加引号导致全表扫描_mysql隐蔽的索引规则导致数据全表扫描
索引是为了加速数据的检索,但是不合理的表结构或适应不当则会起到反作用.我们在项目中就遇到过类似的问题,两个十万级别的数据表,在做连接查询的时候,查询时间达到了7000多秒还没有查出结果. 首先说明,关 ...
- MYSQL避免全表扫描__如何查看sql查询是否用到索引(mysql)
MYSQL避免全表扫描 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2.应尽量避免在 where 子句中对字段进行 null 值判断,否 ...
- SQL SERVER中关于OR会导致索引扫描或全表扫描的浅析
在SQL SERVER的查询语句中使用OR是否会导致不走索引查找(Index Seek)或索引失效(堆表走全表扫描 (Table Scan).聚集索引表走聚集索引扫描(Clustered Index ...
最新文章
- POJ 2187 Beauty Contest( 凸包求最远点对 )
- VMware上安装ubuntu 13.04
- crt python_SecureCRT Python
- 【ESP8266】NONOS SDK开发,发送HTTP请求
- Linux vim多文件切换
- 深信服何朝曦:托管云为用户上云提供第三种选择
- 聊聊我是如何在面试别人Spring事务时“套路”对方的
- 专题:数据自治开放(上)
- 使用node的pm2管理相关进程
- 数十名工程师作战 5 天,阿里达摩院连夜研发智能疫情机器人
- 移动终端如何远程接入企业的核心系统?
- c++ 多线程_python要点-多线程
- Linux--vmlinuz、vmlinux、initrd
- 并行处理与体系结构_理论背景_01
- JDK 运行参数 JAVA -Dxxx与System.setProperty()的关系
- 初中高中睡前必看古诗名句
- Hibernate HHH000179警告和narrow proxy
- 考研二战,入职华为,反向调剂电子科大深圳
- 中国天然大豆卵磷脂市场趋势报告、技术动态创新及市场预测
- php 开源项目汇总
热门文章
- 234. Palindrome Linked List 回文链表
- 841. Keys and Rooms 钥匙和房间
- 2019\Province_C_C++_B\试题B-年号字串
- 10.2.3 基本属性
- PaddlePaddle训练营——公开课——AI核心技术掌握——第2章机器能“看”的现代技术
- Counterfeit Dollar
- 【Linux】一步一步学Linux——sudo命令(105)
- 【Linux】一步一步学Linux——whoami命令(96)
- rsync + inotify
- IA-32 Intel手册学习笔记(三)任务切换