索引 split2
当往一个已经满了的索引块中插入新的索引条目时,将发生索引块的split,在9i下,分两种不同的情况进行split: (1)如果插入的索引键值不是最大的,将发生50-50的split,也就是说有block中一半的索引键值将被移到一个新的block中。 就是说热点增长也始终在热点的右边,导致类似右手增长状况。但是由于不在最有边,将按照50:50 Split,导致接近50%的空间浪费。 (2)如果插入的索引键值是最大的,将发生99-1的split,也就是把新插入的索引键值放在一个新的block中。
测试如下:
1. 完全按照升序的方式进行索引的插入
SQL> drop table t1;
Table dropped.
SQL> create table t1 (name varchar2(10),nr number) pctfree 0;
Table created.
SQL> create index i1 on t1(nr);
Index created.
SQL> declare
2 i number;
3 begin
4 for i in 1..50000
5 loop
6 insert into t1 values('XX',i);
7 end loop;
8 end;
9 /
PL/SQL procedure successfully completed. SQL> analyze index i1 validate structure;
Index analyzed.
SQL> select blocks, lf_blks, pct_used from index_stats;
BLOCKS LF_BLKS PCT_USED
---------- ---------- ----------
104 99 99
这种情况下,每次当需要往一个已经满了的block中插入新的键值时,发生的是99-1的split,把新的键值放到一个新的block中,每个索引块的空间得到充分的利用。
2. 将数据分两批插入,先插入一部分键值较大的数据,插入时按照升序方式,后插入一部分键值较小的数据,插入时也是按升序方式
SQL> drop table t2;
Table dropped.
SQL> create table t2 (name varchar2(10),nr number) pctfree 0;
Table created.
SQL> create index i2 on t2(nr);
Index created.
SQL> declare
2 i number;
3 begin
4 for i in 25000..50000
5 loop
6 insert into t2 values('XX',i);
7 end loop;
8 for i in 1..25000
9 loop
10 insert into t2 values('XX',i);
11 end loop;
12 end;
13 /
PL/SQL procedure successfully completed. SQL> analyze index i2 validate structure;
Index analyzed.
SQL> select blocks, lf_blks, pct_used from index_stats;
BLOCKS LF_BLKS PCT_USED
---------- ---------- ----------
256 146 68
在这种情况下,空间的利用率只有68%,leaf block达到了146个,可以推断发生了索引块的split,但并不是所有的block都发生了50-50的split,因为其利用率大于50%
3.为了证明split时,确实发生的是50-50的split,可以在插入时采用完全降序的方式:
SQL> create table t3 (name varchar2(10),nr number) pctfree 0;
Table created.
SQL> create index i3 on t3(nr);
Index created.
SQL> declare
2 i number;
3 begin
4 for i in reverse 1..50000
5 loop
6 insert into t3 values('XX',i);
7 end loop;
8 end;
9 /
PL/SQL procedure successfully completed. SQL> analyze index i3 validate structure;
Index analyzed.
SQL> select blocks, lf_blks, pct_used from index_stats;
BLOCKS LF_BLKS PCT_USED
---------- ---------- ----------
256 200 50
这种情况下,空间利用率恰为50%,这也充分说明,采用降序插入的方式,每次发生split时,其方式都是50-50。
索引 split2的更多相关文章
- 【.net 深呼吸】细说CodeDom(7):索引器
在开始正题之前,先补充一点前面的内容. 在方法中,如果要引用方法参数,前面的示例中,老周使用的是 CodeVariableReferenceExpression 类,它用于引用变量,也适用于引用方法参 ...
- SQLSERVER聚集索引与非聚集索引的再次研究(上)
SQLSERVER聚集索引与非聚集索引的再次研究(上) 上篇主要说聚集索引 下篇的地址:SQLSERVER聚集索引与非聚集索引的再次研究(下) 由于本人还是SQLSERVER菜鸟一枚,加上一些实验的逻 ...
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- C# 索引器,实现IEnumerable接口的GetEnumerator()方法
当自定义类需要实现索引时,可以在类中实现索引器. 用Table作为例子,Table由多个Row组成,Row由多个Cell组成, 我们需要实现自定义的table[0],row[0] 索引器定义格式为 [ ...
- 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
- SQL 数据优化索引建suo避免全表扫描
首先什么是全表扫描和索引扫描?全表扫描所有数据过一遍才能显示数据结果,索引扫描就是索引,只需要扫描一部分数据就可以得到结果.如果数据没建立索引. 无索引的情况下搜索数据的速度和占用内存就会比用索引的检 ...
- MSSQL 事务,视图,索引,存储过程,触发器
事务 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行. 在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的.这特别适用于多用户同时操作的数据 ...
- SQL Server 2014聚集列存储索引
转发请注明引用和原文博客(http://www.cnblogs.com/wenBlog) 简介 之前已经写过两篇介绍列存储索引的文章,但是只有非聚集列存储索引,今天再来简单介绍一下聚集的列存储索引,也 ...
随机推荐
- 计算器软件的代码实现 (策略模式+asp.net)
一 策略模式代码的编写 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// ...
- IEEE802.11数据帧在Linux上的抓取
IEEE802.11数据帧在Linux上的抓取终于得到了梦寐的<802.11无线网络权威指南>,虽然是复印版本,看起来也一样舒服,光看书是不行的,关键还是自己练习,这就需要搭建一个舒服的实 ...
- hdu 3487 Play with Chain
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3487 YaoYao is fond of playing his chains. He has a c ...
- 【BZOJ】【3164】【HEOI2013】Eden的博弈问题
树形DP 这题在考场上直接写的TreeDP……当时也没想出一个像样的暴力来对拍……好像只能这么直接做了……? 都说是博弈树了,转移关系都给的这么直接了……也没啥难度了吧= =(怪不得大家都不愿意写题解 ...
- 【BZOJ】【1034】【ZJOI2008】泡泡堂BNB
贪心 类似田忌赛马策略的一个贪心= = 随便YY了一个做法居然A了…… 简单来说就是先强对强,弱对弱,能赢就赢,不能赢就让弱的那个去对强的那个,剩下的人继续依次捉对比赛(继续刚刚的策略),现在人数还是 ...
- 事务并发处理: DB+ORM+逻辑代码
在学习了马士兵有关事务并发处理的视频后, 感觉对事务并发处理的概念,问题以及解决方式有了一定的了解,赶紧记录下来以备后用. 1. 事务:一系列操作要么都完成,要么一个都不完成 2. 事务并发:多个事务 ...
- 【JQuery NoviceToNinja系列】目录
[JQuery NoviceToNinja系列]目录 [JQuery NoviceToNinja系列]01 开篇 Html页面设计和布局
- MySQL中文全文索引插件 mysqlcft 1.0.0 安装使用文档[原创]
[文章+程序 作者:张宴 本文版本:v1.0 最后修改:2008.07.01 转载请注明原文链接:http://blog.zyan.cc/post/356/] MySQL在高并发连接.数据库记录数较多 ...
- myeclipse 10的破解以及运行run.bat错误或者双击立即消失的问题
安装包下载: ed2k://|file|[myeclipse.10.0.更新发布].myeclipse-10.0-offline-installer-windows.exe|947752488|73b ...
- 在运行jar时自动加载指定的jar包
初学Java的人经常遇到的一个问题是:如果一个程序依赖某个文件夹下的一堆jar包,那么启动它的时候就需要在java -cp参数后面一个一个的加上jar包的名称,很不方便. 比如主程序类叫Main,在目 ...