oracle索引简介(详细图)
对于数据库来说,索引是一种必要的选择,但是对于今天的大型数据库,索引可以极大地提高数据库的性能,因此它成为数据库中不可缺少的一部分。指标分类:
逻辑分类
为一个或多个列引用单列或串联。
唯一的或非唯一的是独特的,非唯一的,即是否关键值(key)的一列或几列是独一无二的。
基于函数的函数索引。当执行某些函数时,需要计算它。它可以预先保存和索引某些功能的结果,提高效率。
在Doman的索引数据库数据相对较少使用
物理分类
B:正常或反向键的B树索引是我国传统的指数共同的认识,可以称为正向和反向索引。
位图:位图被引用,后面会很好。
B树索引
B树索引也是一个指标,是我们通常理解的tradition.b-tree(平衡树)是平衡树,和左、右两个分支的相对平衡。
B树索引
根是根节点,分支是一个分支节点,叶的底部称为叶节点,每个节点代表一个层。当找到数据时,首先读取根节点,读取分支,最后找到叶节点。叶节点将存储索引条目(索引条目),每个索引项对应一个记录。
索引项的组成部分:
indexentry条目标题存储控制信息。
键列长度的某个键的长度
键列值的键的值。
rowid指针,指向一个具体的数据
创建索引:
复制代码代码如下所示:
用户登录:
SQL >康1 / 1
有联系的.
创建表:
创建表DEX(id int,性char(1),名称char(10));
表的创建。
将1000条数据插入表中
SQL >开始
我在1…1000
环
插入指数(我,是的,'chongshi);
结束循环;
承诺;
结束;
/
已成功完成。
查看表中的记录
选择*;
我本身的名字
--------------------------------
......
M崇实
M崇实
M崇实
M崇实
M崇实
M崇实
M崇实
M崇实
M崇实
M崇实
行选择。
创建索引:
已创建dex_idx1 DEX指数(ID);
建立索引。
注意:为表的第一列(id)创建一个索引。
查看创建的表和索引
SQL >选择object_name,object_type从user_objects;
object_name object_type
--------------------------------------------------------------------------------
DEX表
dex_idx1指数
索引与表分开。作为一个单独的个体,除了单个字段或多列外,还可以创建索引。Oracle要求索引最多只能创建32列。
复制代码代码如下所示:
已创建dex_index2 DEX指数(性别、姓名);
建立索引。
SQL >选择object_name,object_type从user_objects;
object_name object_type
--------------------------------------------------------------------------------
DEX表
dex_idx1指数
dex_index2指数
这里需要理解:
写一本书,只有当页面被固定了,目录才被设置,数据库索引中的内容是一样的。只有先插入数据,建立索引,然后对数据库内容进行跟踪和删除,索引也需要修改,而索引的修改是由Oracle自动完成的。
上面的地图对索引的结构提供了更清楚的描述。
数据从0到50的位置是用节点记录的。分支节点从0到10……42到50分开,叶节点记录每个数据的长度和值,并用指针指向特定的数据。
叶节点的最后一层是双向链接,它是按顺序连接的,这样可以快速锁定数据范围。
如:
复制代码代码如下所示:
从id > > 23和id < 32中选择;
我本身的名字
--------------------------------
M崇实
M崇实
M崇实
M崇实
M崇实
M崇实
M崇实
M崇实
行选择。
如果上面的搜索Liezi,通过索引的方式找到第二十三个数据,然后找到第三十二的数据,所以你可以很快找到一个锁定范围,如果每个数据都是从根节点到它,这样的效率会很低。
位图索引
位图索引是大量相同值的列创建。以第一居民登录表,假设有四个字段:姓名,性别,年龄,和身份证号码,在年龄和性别两领域将有许多相同的价值观,只有两个男性和女性的性别,年龄1~120(假设最大年龄120岁)的价值。无论多少数以百万计的记录都记录在一张桌子上,只有两个值(男性和女性),根据性别领域。位图索引是基于这个领域的特征指标。
位图索引
从上面,我们可以看到,一个叶节点(用不同的颜色标志)是一个关键的开始和结束,ROWID ROWID指定该类型的搜索范围,和叶节点是一个独特的位图值。因为数字类型对应于一个节点。当排查询完成,位图索引获取结果集向量(计算结果)直接按位操作(和/或)不同的位图。
例如:
假设有一个数据表T,有两个数据列A和B,如下所示,我们在A和B列中看到相同的数据。
两个数据列创建位图索引,A和B,分别为:idx_t_bita和idx_t_bitb.the两指标对应的存储逻辑结构如下:
的idx_t_bita索引结构对应的叶子节点:
的idx_t_bitb索引结构对应的叶子节点:
查询SELECT * FROM T b = 1(= =真的'l'or)
分析:位图索引的使用是从B *指数非常不同。一个B *指标的使用,通常从根节点,相比最近的有条件的叶子节点通过一个连续的分支节点,通过连续扫描操作对叶子节点,结果集ROWID扫描。
位图索引很不同。直接位操作(或)不同的位图用于获取结果集向量(计算结果)。
例如SQL,它可以分成以下操作:
1,a 'l'or =是的
a = l:向量:1010
a = m:向量:0001
运算的结果是向量的两个或两个运算:结果是1011。
2。组合b=1的向量
中间结果向量:1011
B = 1:1001:向量
操作和结果的结果,1001,翻译是第一行和第四行是查询的结果。
三.得到的结果数据
它是目前已知的起始和终止ROWID ROWID,以及第一和第四行为结果。结果集的rowid可以通过试算的方法获得的。
位图索引的特点:
存储空间为1。位图索引
位图索引创建速度为2。
3位图索引允许键值为空。
对表记录的有效访问。4。位图索引
创建位图索引:
复制代码代码如下所示:
查看表中的记录
选择*;
…
标识性的名字
--------------------------------
M崇实
M崇实
G崇实
G崇实
G崇实
M崇实
G崇实
G崇实
崇实G
M崇实
行选择。
对于上面的表格,性(性别)只有两个值,最好用于创建位图。
创建索引:
SQL >创建位图索引my_bit_idx DEX(性);
建立索引。
查看所创建的引用
SQL >选择object_name,object_type从user_objects;
object_name object_type
--------------------------------------------------------------------------------
my_bit_idx指数
创建索引的一些规则
1、体重指数和数据之间的关系,和DML是插入和删除数据的操作。
我们需要权衡一下这里的问题。索引的目的是为了提高查询效率,但是太多的索引会影响插入和删除数据的速度,因为我们修改的表的索引和索引也应该被修改。
2,将索引和对应表放在不同的表空间中。
在读取表时,表与索引同时进行,如果表与索引和表空间竞争,则可以并行执行两个表。
3,最好使用与块相同的大小。
Oracle默认的五块,看我/ O一次,如果你定义了6块或10块,你需要阅读两我/ o.it最好是5的整数倍提高效率。
4,如果一个表很大,索引时间很长,因为索引也可以产生大量的重做信息,所以在创建索引时,可以设置没有或更少的重做信息。只要表数据存在,索引就不能生成,所以不需要生成重做信息。
5,在构建索引时,应该根据特定的业务SQL创建,特别是在条件和条件的顺序上。尽可能地过滤后面的大范围,因为SQL执行是从后面的。(萧丽飞的菜刀)
指数的常用操作
改变索引:
复制代码代码如下所示:
SQL >修改索引employees_last _name_idx存储(下400k maxextents 100);
创建索引后,会觉得不合理,还可以对其参数进行修改。
调整指数的空间:
复制代码代码如下所示:
增加空间的新空间
SQL >修改索引orders_region_id_idx分配程度(大小200k可以 / / index01 disk6。dbf);
释放空间
SQL >修改索引oraers_id_idx释放未使用的;
在使用索引的过程中,可能会出现空间或空间的浪费,此时需要添加或释放空间,这两个命令完成了新的发布操作,空间上的新Oracle可以自动帮助。如果您知道数据库,手动增加可以提高性能。
重新创建索引:
铅是由Oracle数据库时,我们频繁操作自动完成,指数会跟着变化,我们删除数据库中的记录时,对应的指标并没有采取相应的指数只是做一个删除标记,但它仍然占用空间。整个街区将被释放,除非在一个块中所有的标签被删除。长期以来,该指数的表现会下降。这个时候你可以重建一个清洁指数提高效率。
复制代码代码如下所示:
SQL >修改索引orders_region_id_idx重建表空间index02;
使用上面的命令,您可以复制索引,Oracle强调索引过程。
1、锁好桌子,锁好桌子后,其他人就不能对桌子做任何事情。
2,创建一个新的(干净的)临时索引。
三.删除旧索引
4。将新索引重命名为旧索引的名称。
5,桌子没有上锁。
运动导致:
事实上,我们还使用上面的命令将索引移动到其他表空间,并在指定的表空间中指定不同的表空间。
复制代码代码如下所示:
SQL >修改索引orders_region_id_idx重建表空间index03;
在网上重新创建索引:
如上所述,当创建索引时,表被锁定,不能使用。对于一个大表,重新创建索引需要很长时间。为了满足用户对表操作的需要,生成了在线重新生成索引。
复制代码代码如下所示:
SQL >修改索引orders_id_idx在线重建;创作过程:
1。锁表
2、创造持续的DML的存在暂时空指数和物联网表,普通表的主键值,表中的数据以表物联网直接存储,和龚DML是一些增删用户所做的操作。
三.打开表
4。从旧索引创建新索引。
5、物联网表存储在正在进行的DML的信息,以及物联网表内容与新创建的索引合并。
6。锁表
7,再次将物联网表的内容更新到新的索引中,旧的索引。
8。将新索引重命名为旧索引的名称。
9。打开表
综合索引片段:
如上图所示,在许多指标有很多的剩余空间,剩余的空间可以由一个命令集成在一起。 U3000 U3000
复制代码代码如下所示:
SQL >修改索引orders_id_idx凝聚;
删除索引:
复制代码代码如下所示:
SQL >索引hr.departments_name_idx;
分析指标
检查结果的结果,在以前的介绍中,电缆参考时间会产生大量的垃圾、垃圾信息和浪费空间,可以创建指数来提高指标的性能。
分析指标可以通过一个命令完成,和分析的结果将被存储在index_stats表。
复制代码代码如下所示:
查看存储分析数据的表:
SQL select count(*)>从index_stats;
计数(*)
----------
执行分析索引命令:
SQL >分析指数my_bit_idx验证结构;
指数分析。
看着index_stats又有一块数据
SQL select count(*)>从index_stats;
计数(*)
----------
查询数据:
警告:选择高度、名称、lf_rows,lf_blks,del_lf_rows从index_stats;
高度的名字lf_rows lf_blks del_lf_rows
-----------------------------------------------------------------------------------------------------
my_bit_idx 10003100
数据分析:
(高度)这个索引的高度是2。(名字)指标名称my_bit_idx。(lf_rows)所引用的表有1000行数据,(lf_blks)占3块,(del_lf_rows)删除100条记录。
这里也验证了前面提到的一个问题,100删除的数据被标记为删除,因为数据的总数仍然是1000,占用3块,然后每个块超过333条记录,只删除超过333条记录的数据,然后一块是空的,总数将减少数据的数量。