关于索引使用的几个小问题
来源:互联网 发布:建周通软件下载 编辑:程序博客网 时间:2024/05/22 13:45
1,视图不能使用索引
答:视图只是一个逻辑定义,只能对基表使用索引。
2.外键一般情况下应该加索引
A,如果一个On delete cascade,没有对子表建索引,则对父表的记录删除,会导致对子表来一次全表扫描,如父表删除多行,
则每行都要来一次全表扫描。
B,从父表查询子表时。例如select * from dept,emp where emp.deptno=dept.deptno and dept.dname=:x;这种情况下,也希望
子表的外键应该加索引。
如果能满足以下条件,则不需要对外键加索引,反而加了还影响子表的DML速度。
a.未删除,更新父表的主键值。
b.不会父表子表联结。
3.
索引能重用空间,如索引放了一个值X=5,后来删除了,再插入X=6,它能重用之前X=5的空间,所以空闲空间能返回给索引结构,而且块
能被重用。对于一个索引,只有当块完全为空时,才可以放到FREELIST上,这与堆组织表的FREELIST身上的块不同,所以FREELIST上的块
完全为空,可以重用。
4.对几个列建索引,最有差别的与没有多少差别的列,顺序不太要紧。但把最没有差别的列放在索引最前面,可以更利用索引键压缩。
5.在有B树索引的表上,select count(*) from T,CBO也选择了全表扫描,而没有使用索引,是为什么呢?
因为索引键完全为NULL的行不会建立相应的索引条目,所以索引键中得行数并不是表中真实的行数,这时优化器的选择是对的。
答:视图只是一个逻辑定义,只能对基表使用索引。
2.外键一般情况下应该加索引
A,如果一个On delete cascade,没有对子表建索引,则对父表的记录删除,会导致对子表来一次全表扫描,如父表删除多行,
则每行都要来一次全表扫描。
B,从父表查询子表时。例如select * from dept,emp where emp.deptno=dept.deptno and dept.dname=:x;这种情况下,也希望
子表的外键应该加索引。
如果能满足以下条件,则不需要对外键加索引,反而加了还影响子表的DML速度。
a.未删除,更新父表的主键值。
b.不会父表子表联结。
3.
索引能重用空间,如索引放了一个值X=5,后来删除了,再插入X=6,它能重用之前X=5的空间,所以空闲空间能返回给索引结构,而且块
能被重用。对于一个索引,只有当块完全为空时,才可以放到FREELIST上,这与堆组织表的FREELIST身上的块不同,所以FREELIST上的块
完全为空,可以重用。
4.对几个列建索引,最有差别的与没有多少差别的列,顺序不太要紧。但把最没有差别的列放在索引最前面,可以更利用索引键压缩。
5.在有B树索引的表上,select count(*) from T,CBO也选择了全表扫描,而没有使用索引,是为什么呢?
因为索引键完全为NULL的行不会建立相应的索引条目,所以索引键中得行数并不是表中真实的行数,这时优化器的选择是对的。
- 关于索引使用的几个小问题
- 关于索引的几个小问题
- 关于mybatis使用的几个小问题
- 关于directx sdk 使用的几个小问题
- 关于使用kettle4.3版本的几个小问题
- 关于几个小问题
- 关于几个计算机系统的小问题
- 关于wince的几个小问题
- 关于PHP的几个小问题
- 关于Qt的几个小问题
- 关于NASM的几个小问题
- 链表中关于环的几个小问题
- 关于mysql的几个小问题
- 关于openSessionInViewFilter的几个小问题
- 关于expdp的几个小问题
- 关于面试的几个小问题
- 关于几个linux的小问题
- 关于几个小问题的解决方案
- JQuery获取服务器控件插件
- c语言不定参数函数
- 《java 中的 Hashtable类》
- ruby的class与module的区别
- Android Application与thread、stack、task、activity之间的关系
- 关于索引使用的几个小问题
- 黑马训练营_SQL学习笔记续二
- dos命令学习基础
- 快排算法也可以这样实现。。。@一
- 软件设计之易用性
- 301转向代码合集
- 項目管理FAQ
- 理想过程 关键词 随想
- 《java中的 Stack类》