Oracle 索引

RT-Thread实战:手把手教你用STM32F04ZGT6通过SPI驱动BMI088(附完整工程) 本文详细介绍了如何使用RT-Thread操作系统在STM32F04ZGT6上通过SPI接口驱动BMI088高性能6轴惯性传感器(包含陀螺仪和加速度计)。从硬件连接到软件配置,再到数据采集与处理,提供了完整的开发指南和优化技巧,帮助开发者快速实现精确的姿态测量功能。 阅读详情

索引概述:

在关系型数据库中,用户查找数据与行的物理位置无关紧要。为了能够找到数据,表中的每一行均用一个 ROWID 来标识 ,ROWID 能够标识数据库中某一行的具体位置。

如果一个数据表中存有海量的数据记录,当对表执行指定条件的查询时。常规的查询方法会将所 有的记录都读取出来,然后再把读取的每一条记录与查询条件进行比对,最后返回满足条件的记录。 这样进行操作的时间开销和 I/O 开销都很大。对于这种情况,就可以考虑通过建立索引来减小系统开销。

如果要在表中查询指定的记录,在没有索引的情况下,必须遍历整个表,而有了索引之后,只需 要在索引中找到符合查询条件的索引字段值,就可以通过保存在索引中的 ROWID 快速找到表中对应 的记录。

用户可以在 Oracle 中创建多种类型的索引,以适应各种表的特点。

索引分类:

按照索引数据的存储方式可以将索引分成:B树索引、位图索引、反向索引、基于函数的索引

按照索引列的唯一性可以分为:唯一索引、非唯一索引

按照索引列的个数可以分为:单列索引、复合索引

建立和规划索引时,必须选择合适的表和列,如果选择的表和列不合适,不仅无法提高查询速度,反而会极大的降低 DML 操作的速度,所以建立索引必须注意:

  • 索引应该建立在 WHERE 子句频繁引用表列上,如果在大表上频繁使用某列或某几个列作为条件执行索引操作,并且检索行数低于总行数 15%,那么应该考虑在这些列上建立索引。
  • 如果经常需要基于某列或某几个列执行排序操作,那么在这些列上建立索引可以加快数据排序速度。
  • 限制表的索引个数。索引主要用于加快查询速度,但会降低 DML(数据库操作语言) 操作的速度。索引越多, DML 操作速度越慢,尤其会极大地影响 INSERT 和 DELETE 操作的速度。因此,规划索引时, 必须仔细权衡查询和 DML 的需求。
  • 指定索引块空间的使用参数。基于表建立索引时,Oracle 会将相应表列数据添加到索引块。 为索引块添加数据时,Oracle 会按照 PCTFREE 参数在索引块上预留部分空间,该预留空间是为将来的 INSERT 操作准备的。如果将来在表上执行大量 INSERT 操作,那么应该在建立索引时设置较大的 PCTFREE。
  • 将表和索引部署到相同的表空间,可以简化表空间的管理;将表和索引部署到不同的表空间, 可以提高访问性能。 (将索引和对应的表分别放在同的表空不同硬盘的不间中能够提高查询的速度,因为 Oracle 能够并行读取不同硬盘的数据,这样可以避免产生 I/O 冲突。)
  • 当在大表上建立索引时,使用 NOLOGGING 选项可以最小化重做记录。使用 NOLOGGING 选项可以节省重做日志空间、降低索引建立时间、提高索引并行建立的性能。
  • 不要在小表上建立索引。
  • 为了提高多表连接的性能,应该在连接列上建立索引。

创建索引

在创建索引时,Oracle 首先对将要建立索引的字段进行排序,然后将排序后的字段值和对应记录的 ROWID 存储在索引段中。

B树索引

B 树索引是 Oracle 数据库最常用的索引类型(也是默认的),它是以 B 树结构组织并存放索引数据的。默认情况下,B 树索引中的数据是以升序方式排列的。如果表包含的数据非常多,并且经常在 WHERE 子句中引用某列或某几个列,则应该基于该列或这几个列建立 B 树索引。B 树索引由根块、分支块和叶块组成,其中主要数据都集中在叶子节点

根块:索引顶级块,它包含指向下一级节点的信息。

分支块:它包含指向下一级节点(分支块或叶块)的信息。

叶块:通常也称为叶子,它包含索引入口数据,索引入口包含索引列的值和记录行对应的物理地址 ROWID。

在 B 树索引中无论用户要搜索哪个分支的叶块,都可以保证所经过的索引层次是相同的。Oracle 采用这种方式的索引,可以确保无论索引条目位于何处,都只需要花费相同的 I/O 即可获取它,这就 是为什么被称为 B 树索引(B 是英文 BALANCED 的缩写)。

--create index Index_Name on table(字段名)

SQL> create index emp_deptno_index on emp(deptno)
 2 pctfree 25
 3 tablespace users;
索引已创建

--子句 PCTFREE 指定为将来 INSERT 操作所预留的空闲空间,子句 TABLESPACE 用于指定索引段所在的表空间。
--假设表已经包含了大量数据,那么在建立索引时应该仔细规划 PCTFREE 的值,以便为以后的 INSERT 操作预留空间。

位图索引

索引的作用简单地说就是能够通过给定的索引列值,快速地找到对应的记录。在 B 树索引中,通过在索引中保存排序的索引列的值以及记录的物理地址 ROWID 来实现快速查找。但是对于一些特殊的表,B 树索引的效率可能会很低。

例如,在某个具有性别列的表中,该列的所有取值只能是男或女。如果在性别列上创建 B 树索引, 那么创建的 B 树只有两个分支,如图 10.2 所示。那么使用该索引对该表进行检索时,将返回接近一半 的记录,这样也就失去了索引的基本作用。

 当列的基数很低时,为其建立 B 树索引显然不合适。“基数低”表示在索引列中,所有取值的数量比表中行的数量少。 如“性别”列只有两个取值;再比如某个拥有 10000 行的表, 它的一个列包含 100 个不同的取值,则该列仍然满足低基数的 要求,因为该列与行数的比例为 1%。Oracle 推荐当一个列的基数小于 1%时,这些列不再适合建立 B 树索引,而适用于位图索引。

位图索引介绍:https://www.cnblogs.com/LBSer/p/3322630.html

在表中低基数的列上建立位图索引时,系统将对表进行 一次全面扫描,为遇到的各个取值构建“图表”。

SQL> create bitmap index emp_salary_bmp
 2 on employees(salary)
 3 tablespace users;
索引已创建

初始化参数 CREATE_BITMAP_AREA_SIZE 用于指定建立位图索引时分配的位图区大小,默认值 为 8MB,该参数值越大,建立位图索引的速度越快。为了加快创建位图索引的速度,应将该参数设置 为更大的值。因为该参数是静态参数,所以修改后必须重新启动数据库才能生效。

反向键索引 

 在 Oracle 中,系统会自动为表的主键列建立索引,这个默认是普通的 B 树索引。通常,用户会希 望表的主键是一个自动增长的序列编号,这样的列就是所谓的单调递增序列编号列。当在这种顺序递 增的列上建立普通的 B 树索引时,如果表的数据量非常大,将导致索引数据分布不均。

分析:常规的B树索引

这是一个典型的常规 B 树索引。如果现在要为其添加新的数据,用于主键列的单调递 增性,很明显不需要重新访问早先的叶子节点。接下的数据获得的主键为 700,下一组数据的主键为 800,以此类推。

这种方法在某些方面是具有优势的,由于它不存在在已经存在的表项之间嵌入新的表项这一现象, 所以不会发生叶子节点的数据块分割。这意味着单调递增序列上的索引能够完全利用它的叶子节点, 非常紧密地存放数据块,可以有效利用存储空间。然而这种优势是需要付出代价的,每条记录都会占 据最后的叶子节点,即使删除了先前的节点,也会导致同样的问题。这最终会导致对某一边的叶子节 点的大量占用。

所以就需要设计一个规则,阻止用户在单调递增序列上建立索引后使用叶子节点偏向某一个方向。 遗憾的是,序列编号通常是用来做表的主键的,每个主键都需要建立索引,如果用户没有建立索引, Oracle 也会自动建立。但是,Oracle 提供另一种索引机制,即反向键索引,它可以将添加的数据随机 分散到索引中。

反向键索引是一种特殊类型的 B 树索引,在顺序递增列上建立索引时非常有用。反向键索引的工 作原理非常简单,在存储结构方面它与常规的 B 树索引相同。然而,如果用户使用序列在表中输入记 录,则反向键索引首先指向每个列键值的字节,然后在反向后的新数据上进行索引。例如,如果用户输入的索引列为 2011,则反向转换后为 1102;9527 反向转换后为 7259。需要注意,刚才提及的两个 序列编号是递增的,但是当进行反向键索引时却是非递增的。这意味如果将其添加到子叶节点,可能 会在任意的子叶节点中进行。这样就使得新数据在值的范围上的分布通常比原来的有序数更均匀。

SQL> connect scott/1qaz2wsx
已连接
SQL> create index emp_job_reverse
 2 on emp(job) reverse
 3 tablespace users;
索引已创建

--如果在该列上已经建立了普通 B 树索引,那么可以使用 ALTER INDEX…REBUILD 将其重新建立为反向键索引
SQL> connect scott/1qaz2wsx
已连接
SQL> alter index emp_deptno_index
 2 rebuild reverse;
索引已更改

 基于函数的索引

Oracle 提供了一种新的索引类型——基于函数的索引。基于函数的索引只是常 规 B 树索引,但它存放的数据是由表中的数据应用函数后所得到的,而不是直接存放表中的数据本身。

SQL> create index emp_job_fun
 2 on emp(lower(job));
索引已创建

在创建该函数索引之后,如果在查询条件中包含相同的函数,则系统会利用它来提高查询的执行效率。

RSA 2048/4096 签名校验算法 RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。 今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能... 阅读详情

相关推荐

手把手教你用Python实现双三次插值(附OpenCV对比测试)

本文深入解析了双三次插值算法的数学原理,并提供了从零开始的Python实现教程。通过与OpenCV官方实现的对比测试,详细评估了不同插值算法(包括最邻近差值、双线性插值)在图像质量与计算性能上的差异,帮助开发者掌握高质量图像缩放的核心技术。

weixin_29310605的博客 293

ORACLE索引失效和sql优化

执行计划里最边有个*号 表示这个在下面的分析语句里出现了,执行计划对应的是 29 行 花费了1959个单位而且走了全表扫描。交易日期过滤数据时使用了to_date写法,导致日期字段查询未走索引。将控制台输出的sql 粘贴到plsql 按F5打开解释计划执行窗口。是对交易日期进行了to_char()的写法然后进行筛选查询。然后删除了sql中的to_char()函数 在查看执行计划。现在可以看到26行对应的执行计划只花费了3个单位。切换到HTML,该窗口能更清晰的看到执行计划。拉到最下面可以看到执行的语句。

dshakjhfvf的博客 698

千兆以太网PHY设计:PCB原理图完整示例

深入解析千兆以太网PHY电路设计要点,提供完整的PCB原理图设计实例,帮助工程师掌握高速信号布局与电源去耦等关键技术,提升设计稳定性与信号完整性。

weixin_30633869的博客 628

oracle 索引失效的原因

索引失效  1) 没有查询条件,或者查询条件没有建立索引  2) 在查询条件上没有使用引导列  3) 查询的数量是大表的大部分,应该是30%以上。  4) 索引本身失效  5) 查询条件使用函数在索引列上(见12)  6) 对小表查询  7) 提示不使用索引  8) 统计数据不真实  9) CBO计算走索引花费过大的情况。其实也包含了上面的情况,这里指的是表占有的block要比索

Baple的专栏 8169

Bybit面经

这段总结描述了求职者在Bybit面试过程中的经历和相关问题,包括面试内容、求职者向面试官提问的问题以及关于Bybit的信息

郑泽洲的博客 2578

用Pixel5玩转AOSP:从零开始定制Android13系统(含GMS集成方案)

本文提供了一份详尽的Pixel 5 AOSP定制指南,涵盖从环境搭建、源码下载、系统编译到刷机的完整流程。重点解决了原生AOSP缺失Google移动服务(GMS)的难题,分享了从官方镜像提取并集成GMS组件的实战方案,助你打造独一无二的Android 13系统。

sam99的博客 526

oracle数据库to_date函数导致索引失效的解决方案

oracle数据库to_date函数导致索引失效的解决方案,新增TO_CHAR的函数索引。这样就完成sql优化。

于琦海 6090

【SystemVerilog项目实践】4.AHB-SRAMC(验证计划)

验证计划

托马斯的博客 3659

在Oracle数据库中,哪些操作会导致索引失效?

A答案 当某些操作导致数据行的ROWID改变,索引就会完全失效。可以分普通表和分区表来讨论哪些操作将导致索引失效。 (一)普通表索引失效的情形如下所示: ① 手动置索引无效:ALTER INDEX IND_OBJECT_ID UNUSABLE;。 ② 如果对表进行MOVE操作(包含移动表空间和压缩操作)或在线重定义表后,那么该表上所有的索引状态会变为UNUSABLE。MOVE操作的S...

qq_40588579的博客 2173

实战分享:如何用Jetson Nano+HM30图传搭建低空YOLOv5检测系统(附VNC避坑指南)

本文详细介绍了如何利用Jetson Nano和HM30图传搭建低空YOLOv5检测系统,重点解决了无人机应用中的硬件连接和VNC延迟优化问题。通过对比WiFi直连与图传方案的优劣,提供了网络配置、VNC优化及YOLOv5模型加速的实战技巧,帮助开发者实现高效稳定的低空目标检测系统。

weixin_29174385的博客 110

3.4 ISIS和OSPF之间路由引入

通过以上输出可以看到OSPF的路由引入到了IS-IS中。通过以上输出可以看到ISIS的路由没有传递给OSPF。通过以上输出可以看到OSPF的路由没有传递给ISIS。通过以上输出可以看到ISIS的路由被引入进了OSPF。掌握在IS-IS中引入OSPF路由的方法。掌握在OSPF中引入IS-IS路由的方法。图3-3:ISIS和OSPF之间路由引入。在R3上把ISIS的路由引入到OSPF。OSPF引入外部路由的缺省度量值为1。在R3上把OSPF的路由引入到ISIS。引入的外部路由类型为Type2。

lwljh134的博客 1802

Oracle组合索引顺序导致的性能问题

Oracle索引顺序,将最细纬度的字段放前面,最大纬度的字段放后面

weixin_44079435的博客 919

【C语言】字符常量详解

字符常量是C语言中处理字符数据的重要工具。通过单引号括起一个字符,我们可以方便地使用字符常量进行字符判断、字符运算和字符串处理等操作。理解字符常量的表示方法、使用场景和ASCII码对应关系,对于编写高效的C语言程序至关重要。

LuckiBit 5017

Oracle索引和分区索引

一.索引 1.索引的概念 索引是一种可选的与表相关的数据库对象。数据库中引入索引的目的是为了提高对表中数据的查询速度。ORACLE并不是机械地为所有查询都使用索引,而是根据用户的具体使用情况,决定是否使用索引搜索数据。 2.索引类型 1 B树索引:又称平衡树索引,按照平衡树算法来组织的索引的,适合索引值取值范围广泛、重复率低的应用。2 位图索引:按位图结构组织的索引,适合索引取值范围小、重复率高...

CX的博客 2755

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Oracle中索引的原理

索引的概念 索引是一种数据库结构,能够就数据库中的某列提供快速查询,而不用检索整个表格(官方的不行)。 在 Oracle 数据库中,存储的每一行数据都有一个 rowID 来标识。当 Oracle 中存储着大量的数据时,意味着有大量的 rowID 。 当对 Oracle 表执行指定条件的查询时,常规的方法是将所有的记录取出来,然后再把每一条记录与查询条件作对比,最后返回满足条件的记录。这样操作不仅耗费时间并耗费资源。 此时想要快速定位指定的 rowID ,就需要使用索引对象。建立索引时,oracle会首先

hero_is_me的博客 4113

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

oracle表重命名 索引,Oracle索引

Oracle索引Oracle索引(index)最大的作用是用来优化数据库查询的效率,提升数据库的查询性能。就好比书的目录一样,可以通过目录来直接定位所需内容存在的页数,大大提高检索效率。Oracle数据库中如果某列出现在查询的条件中,而该列的数据是无序的,查询时只能从第一行开始一行一行的匹配。创建索引就是对某些特定列中的数据进行排序或归类,生成独立的索引表。在某列上创建索引后,如果该列出现在查询条...

weixin_35625397的博客 3532

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

oracle中各种索引的总结

索引在ORACLE SQL-TUNNING中起着重要作用,索引分为B-TREE索引,BITMAP索引两大类,但是特别需要强调的就是索引组织表,clustering这两种最特别的索引!其中用的最多还是B-TREE索引。1.        B-TREE索引B-TREE索引是我们平时用的最多,B-TREE顾名思义就是类似树结构,我想学过计算机的同学都应该理解。每个叶子节点存储的格式为:键

CYHJRX的专栏 1556

oracle 索引

如果数据都存储在同一个数据库块上,并且将HASH索引作为WHERE子句中的确切匹配,Oracle就可以通过执行一个HASH函数和I/O来访问数据,而通过使用一个二元高度为4的B树索引来访问数据,则需要在检索数据时使用4个I/O。)这种情况默认索引分布过于密集,不能利用好服务器的并行,但是反向之后变成10001,20001,33001,50001,61001就有了一个很好的分布,能高效的利用好并行运算。因为这些索引是低基数的B树索引,所以非常小,可以经常检索表中超过半数的行,并且仍使用位图索引。

qq_22201881的博客 2570

oracle 索引修复 Oracle索引重建

当数据库出现坏块而坏块所涉及对象为索引时,我们一般进行修复索引的方法是重建索引。 相对其它坏块,索引坏块修复起来最容易的。不过在修复前,我们需要确认这个坏块确实来自于某索引。 因此,这里我们会介绍一些块定位方法: 1. 如何在ORA-1578/RMAN/DBVERIFY的日志记录中确认讹误受损对象 首先需要确认绝对文件号(Absolute File Number: AFN)和块号(Blo...

ORACLE数据库数据恢复、性能优化、故障诊断来问问MACLEAN 9117

oracle中怎么查看索引,查看oracle中表的索引

oracle中表的索引信息存在user_indexes 和user_ind_columns 两张表里面,其中,user_indexes 系统视图存放是索引的名称以及该索引是否是唯一索引等信息,user_ind_columns统视图存放的是索引名称,对应的表和列等sql示例:基本查询:select * from user_indexes;select * from user_ind_colum...

weixin_39626927的博客 9403

Oracle强制索引

oracle hint 强制索引(转) oracle 1.建议建立一个以paytime,id,cost的复合索引。光是在paytime上建立索引会产生很多随机读。 2.就算建立了索引,如果你查询的数据量很大的话,也不一定会用索引,有时候全表扫描速度比索引扫描要快!(官方文档上好像说的是大概10%,就是如果你查询的数据占到总数据的10%,全表扫描比索引快)。 3.建复合索引语句如下(建议去看看官...

勇敢牛牛 1万+

oracle怎么么创建索引,Oracle 创建索引,oracle索引怎么创建

Oracle 创建索引,oracle索引怎么创建索引是数据库服务器用来加快检索的速度,再通过加了索引的列进行检索时候,数据库会自动使用索引,使用索引所在的列值进行快速检索,快速定位到真实的数据内容。哪些场合使用索引?1.频繁使用where字句或连接条件2.表比较大,数量多3.列的取值范围广4.查询结果占比比较小索引创建1.自动创建索引:在创建主键约束,唯一键约束,主键约束时会自动创建索引2.手动创...

weixin_28867991的博客 4442

oracle为表增加索引,【增加Oracle中表的索引】

1)概念: Oracle中的索引是基于表或集群的数据对象. 它具有类似于表的独立段存储结构,并且需要在表空间中分配存储空间.2)功能: 可以提高查找表中数据的速度.1)B树索引(测试站点): 它是Oracle中使用最广泛的索引和默认索引类型. B树是指平衡树(Balanced Tree),它使用平衡算法来管理索引.适用于B树索引:2)位图索引: 当要索引的数据具有大量重复值时,如果在其上建立了B...

weixin_39633054的博客 4937

oracle bitmap btree 索引,oracle之bitmap索引

oracle常见的索引是BTree索引和Bitmap索引。BTree索引特点:默认索引适合大量增删改查不能用or操作符适合高基数的列(即唯一值多)创建sql:create index lie_idx1 on table(liename);Bitmap索引特点:做update代价非常高非常适合or操作符基数少的列(即重复值多)创建sql:create bitmap index lie_bit_idx...

weixin_32179097的博客 1507

Oracle 索引详解

本文系统介绍了Oracle数据库索引的分类、创建和维护方法。索引主要分为逻辑分类(单列/复合、唯一/非唯一、函数/域索引)和物理分类(分区/非分区索引)。重点阐述了平衡树索引、倒序索引和位图索引的原理及应用场景,并提供了创建索引的最佳实践准则。同时详细讲解了索引的维护操作,包括重建索引(离线和在线模式)、合并索引碎片以及监控索引使用情况的方法。通过合理使用索引,可以显著提升查询性能,但也需注意索引对DML操作的影响。

2301_81096162的博客 1414

oracle中创建hash索引的语句,Oracle 索引 详解 - 索引介绍

一.索引介绍1.1索引的创建语法:CREATEUNIUQE|BITMAPINDEX.ON.(|ASC|DESC,|ASC|DESC,...)TABLESPACESTORAGELOGGING|NOLOGGINGCOMPUTESTATISTICSNOCOMPRESS|COMPRESSNOSORT|REVERSEPARTITION|GLOBALPA...

weixin_39829497的博客 1788
上一篇: 判断文本框输入中文超过10个英文数字超过20个
下一篇: 华为OD东莞技术一面(java)
程序员楂楂
博客等级 码龄9年 17粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值