我们知道一般的表都以堆(heap)的形式来组织的,这是无序的组织方式。

    Oracle还提供了一种有序的表,它就是索引组织表,简称IOT表。IOT表上必须要有主键,而IOT表本身不对应segment,表里所有的数据都存放在主键所在的索引的叶子节点里。

    换句话说,在索引叶子节点里的索引条目里不仅存放了被索引的列的值,还同时存放了其他列的值。

    对于总是通过主键访问数据的表来说,比较适合使用IOT表。如果使用普通表,则通过主键索引访问表时,至少要读取两个数据块:一个索引块,另一个是表的数据块。

    而如果通过IOT表,由于表的数据就存放在索引块中,所以只需要读取一个块即可。IOT表时虚拟表,但是他具有普通表所有的特性。

    而且尽管IOT表的数据实际存放在索引segment里,但是我们还是可以在IOT表的基础上,在其他列上再次创建索引,这种索引我们叫二级索引。

使用二级索引查找数据时,存在以下两个阶段:
1,物理猜测:根据二级索引里记录的物理ROWID,去扫描其指向的IOT表所依附的索引segment里的索引节点。
2,逻辑猜测:由于IOT表的数据存放在索引的叶子节点里,而由于在索引里数据都是有序存放的,数据会子会在叶子节点中间插入,因此就存在向叶子节点的拆分问题。一旦叶子节点被拆分,数据所在的索引块就会变化,那么二级索引所指向的位置也就错误了。通过物理ROWID去访问IOT表就找不到数据。这个时候,Oracle会进行逻辑猜测,这时就不使用ROWID了,而是使用主键列的值去扫描IOT表。 创建IOT表的例子如下:
create table iot_test(id number,c1 varchar2(40),c2 varchar2(40),c3 varchar2(40),c4 varchar2(40),primary key(id)) organization index SQL> select object_name,object_type from user_objects; OBJECT_NAME OBJECT_TYPE
-------------------- -------------------
SYS_IOT_TOP_96480 INDEX
IOT_TEST TABLE 我们定义的IOT表时,必须创建一个主键约束,然后指定organization index选项,可以同时指定主键对应的索引所在的表空间名称。 从上面的例子中,假设经常访问的列id和c1这两个列,则如果把其他的c2,c3,c4列也放在索引块里,会比较浪费空间。因为这三列并不经常被访问,没有必要把他们与id,c1放在一起。于是我么就可以通过设置pctthreshold和including这两个属性,从而只在索引块里存放id和c1,而且他的三列在放入overflow里,(overflow是一种segment). pctthreshold说明留在索引块里的数据空间占总数据块大小的百分比,从0到50%。假设在IOT_TEST表中,id列和c1列总共大概需要400个字节,索引块大小为8kB,我们希望ID列和C1列留在索引块里。则留在索引块里的数据占整个索引块大小的5%(500/8192),于是可以将pctthreshold设置为5.我们还可以使用including,对于上面的例子来说,including c2表示从C2列开始,后面所有的列(也就是C2,C3,C4这三列)都放到overflow里。优先考虑pctthreshold,也就是说如果id列的值占数据块大小的百分比已经超过了指定的pctthreshold,则尽管指定的是从C2列开始后面的所有列都放入OVERFLOW,但是由于违反了pctthreshold,则C1以后的列也都全部放入overflow里(即c1,c2,c3,c4都放入overflow里) Mysql IOT表: IOT表 (sn,a1,a2,a3) SN上有主键 这个主键存放了sn,a1,a2,a3的数据 那么我在a1上在创建索引test_idx1 那么test_idx1包含哪些数据 a1,sn这样排列的应该
通过sn来回表

Mysql iot表的更多相关文章

  1. Mysql InnoDB 是IOT表 锁基于索引

    </pre>Mysql InnoDB 是IOT表 锁基于索引<pre>

  2. mysql向表中某字段后追加一段字符串:

    mysql向表中某字段后追加一段字符串:update table_name set field=CONCAT(field,'',str) mysql 向表中某字段前加字符串update table_n ...

  3. oracle与mysql创建表时的区别

    oracle创建表时,不支持在建表时同时增加字段注释.故采用以下方式: #创建表CREATE TABLE predict_data as ( id integer ), mid ), time dat ...

  4. mysql数据库表的自增主键号不规律,重新排列

    mysql数据库表的自增主键ID乱了,需要重新排序. 原理:删除原有的自增ID,重新建立新的自增ID. 1.删除原有主键: ALTER TABLE `table_name` DROP `id`; 2. ...

  5. 基于表的数据字典构造MySQL建表语句

    表的数据字典格式如下: 如果手动写MySQL建表语句,确认麻烦,还不能保证书写一定正确. 写了个Perl脚本,可快速构造MySQL脚本语句. 脚本如下: #!/usr/bin/perl use str ...

  6. 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

    创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...

  7. 用户中心mysql数据库表结构的脚本

    /* Navicat MySQL Data Transfer Source Server : rm-m5e3xn7k26i026e75o.mysql.rds.aliyuncs.com Source S ...

  8. MySQL InnoDB表--BTree基本数据结构

    MySQL InnoDB表是索引组织表这一点应该是每一个学习MySQL的人都会首先学到的知识,这代表这表中的数据是按照主键顺序存储,也就是说BTree的叶子节点存储了所有该行的数据. 我最开始是搞Or ...

  9. mysql数据库表结构导出

    mysql数据库表结构导出 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据 mysqldump -h localh ...

随机推荐

  1. 关于 Swift

    摘自:http://numbbbbb.gitbooks.io/-the-swift-programming-language-/chapter1/01_swift.html Swift 是一种新的编程 ...

  2. django-template-loader

    当在settings.py中设置了如下 TEMPLATE_LOADERS=( 'django.template.loaders.filesystem.Loader', 'django.template ...

  3. mysql启动的四种方式

    mysql的四种启动方式: .mysqld 启动mysql服务器:./mysqld --defaults-file=/etc/my.cnf --user=root 客户端连接: mysql --def ...

  4. 阿里云ECS专有网络产品三个步骤配置教程

    阿里云ECS专有网络产品三个步骤配置教程 阿里云专有网络节点已开通地域:美国硅谷可用区1B,新加坡可用区A,北京可用区A,深圳可用区A,杭州可用区D,上海可用区B 举个栗子:购买 美国硅谷可用区1B  ...

  5. php实现加好友功能

    思路: 1用户发送好友申请之后 把申请储存到申请数据表中,状态为 未验证 2 当用户登录时,查询申请表中是否有uid和被申请人id相同的,如果同意,更改状态,并把数据插入到对应的好友数据表否则,删除申 ...

  6. o(n)解决问题:调整数组顺序是奇数位于偶数的前面

    问题描述: 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分 void reOrder(int *a,int len) { if(a==NULL || ...

  7. anroid里面的post请求

    一.需要用到的场景 在jQuery中使用$.post()就可以方便的发起一个post请求,在android程序中有时也要从服务器获取一些数据,就也必须得使用post请求了. 二.需要用到的主要类 在a ...

  8. FileStream -- 复制文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. WS_EX_TOOLWINDOW 属性的陷阱

    WS_EX_TOOLWINDOW,带有这个属性的窗口有以下特点: 1. 不在任务栏显示. 2. 不显示在Alt+Tab的切换列表中. 3. 在任务管理器的窗口管理Tab中不显示. 我们可能会出于某种目 ...

  10. C# WinForm 和 javascript进行交互 使用HTML做界面

    01 using System; 02 using System.Collections.Generic; 03 using System.Text; 04 using System.Reflecti ...