零基础学习sql(5)---索引
来源:互联网 发布:exo light软件 编辑:程序博客网 时间:2024/06/06 00:10
终于到索引了。。。
零基础的人是对索引来讲是感兴趣,也想懂,我在实体班级,给很多跨IT 专业的人讲课(真正的零零基础,可以让很多人改变他的人生,我觉得对我来讲就是一个成功,
现在实体上课的学生累计超过50人) :
索引类似字典目录,要去查找某个汉字,需要翻索引,不然就要把整个字典全部搜索,
索引结构图,如下图:
索引由三层组成, root, branch, leaf
其中叶子节点是存储 列值和rowid 的, 对于零基础的人,确实不知道什么是rowid,
rowid 可以理解为门牌号码, 比如快递员去给大家送快递,是不是通过门牌号码去定位大家的位置的? 一样的,就有rowid 了
那什么是rowid 呢?
rowid 的组成是由对象号(可以理解为表),文件号,块号组成
简单例子:
SQL> drop table t;
表已删除。
SQL> create table t(a int);
表已创建。
SQL> insert into t values(5);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select a,rowid from t;
A ROWID
---------- ------------------
5 AAASjTAAEAAAd3WAAA
我们访问这一行 就可以
SQL> select * from t where rowid ='AAASjTAAEAAAd3WAAA';
A
----------
5
这个rowid 就是伪列的概念,什么是伪列? 就是有不是你创建的,但是能查询出来的。。。
懂了吧。。。
具体rowid 的组成,没什么好看的,大家可以去百度。
大家理解索引的rowid 是门牌号码即可,是物理地址即可。
那么索引是怎么通过树形结构找到rowid 的呢,我们再来看一个图片:
讲这个之前,给大家讲下二分法的概念,
我举个例子,假如我有1到100, 那么我们查找30 ,怎么找
根据二分法是这样找的
1到100,是中间的50, 那么30是大于1,小于50,那么又二分,到25和50 ,然后又二分到25到37,然后继续二分,是25 到31, 然后二分是28到31
然后再二分就是30。
索引的树查询也是这种,对于图片里面的值,类似的查找到,但是oracle 为什么叫平衡树索引结构(b*) ,其实就是因为root,branch 都不存储rowid,
都必须到leaf 节点才可以找到 rowid. 查找任何一个值(比如28, 30) 都是一样的io数目(都是3个)
我们来创建一个索引:
SQL> create index t_idx on t(a);
索引已创建。
SQL> set autot on exp;
SQL> select a from t where a=2;
未选定行
执行计划
----------------------------------------------------------
Plan hash value: 2946670127
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 1 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| T_IDX | 1 | 13 | 1 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("A"=2)
看执行计划里面,可以看出来走了索引。。。
没有数据库经验的同学,有个印象就好了,后面我们还会讲,怎么分析索引。。。
这里只是有个概念:
问题: 1. 如何查询a 表有几个索引, 索引的字段是哪列?
- 零基础学习sql(5)---索引
- SQL零基础学习笔记(一)
- 零基础学习sql篇(1)
- 零基础学习sql(2)--- 数据类型
- 零基础学习sql(3)--- 约束
- 零基础学习sql(6) -视图
- 零基础学习sql(7) 序列
- 零基础学习sql(4)--- 用户权限角色管理
- (Oracle)零基础学习SQL语句--第1篇
- 零基础入门深度学习(5)
- 零基础入门深度学习(5)
- javascript零基础学习
- Siebel零基础学习
- 零基础学习iOS
- 零基础学习计算机
- 零基础学习python
- Annotation 零基础学习
- 零基础学习hadoop
- Dia作图过程中添加latex格式字符方法
- (八十五)?: 运算符
- static 修饰全局变量、局部变量和函数的区别
- PV操作与信号灯例子
- Linux如何查看JDK的安装路径
- 零基础学习sql(5)---索引
- 系统完善--美丽邵阳(三)
- Sublime Text 2 入门及技巧
- Sublime Text 3 破…
- MyBatis学习总结(一)——MyBatis快速…
- MyBatis学习总结(二)——使用MyBatis…
- MyBatis学习总结(三)——优化MyBatis…
- Android重要控件概览(下)
- MyBatis学习总结(四)——解决字段名…