oracle索引

本文详细介绍了Oracle数据库中的索引概念,包括索引的作用、类型、优缺点及创建原则等内容。探讨了不同类型的索引,如B树索引、位图索引和函数索引的应用场景,并提供了实际操作的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle索引:一种用于提升查询效率的数据库对象。通过快速定位数据的方法,减少磁盘I/O操作。
数据唯一性越高,索引的速度也越快。所以oracle会自动为主键创建一个索引。
索引信息与表独立存放,这是因为为了减少磁盘的I/O操作。
oracle数据库自动使用和维护索引。
insert,delete的时候索引是自动维护的。
当我们增加,删除的时候,把二叉树的均衡搞乱了,所以我们要手动维护。手动维护就是·····

索引的分类:
唯一性索引:字段的值是唯一的,它的性能高。
非唯一性索引:

一般查询的数据比较少时,我们就不要用索引了,要查询的数据比较大时,我们用索引性能会更高。
但要把所有的数据都查询出来时,就不要用索引了。

表中的数据是无序的,索引的数据是有序的。

索引优缺点:
优点:
1.大大加快数据的检索速度;
2.创建唯一性索引,保证数据库表中每一行数据的唯一性;
3.加速表和表之间的连接;
4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间,因为索引是有序的。
缺点:
1.索引需要占物理空间。
2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护(自动的),降低了数据的维护速度。

创建索引一般有以下两个目的:维护被索引列的唯一性和提供快速访问表中数据的策略。
索引里面一般存的是noid。我们找到noid,就可以找到这个noid对应的块。

创建索引的原则:
1.在select操作占大部分的表上创建索引;
2.在where子句中出现最频繁的列上创建索引;
3.在选择性高的列上创建索引(补充索引选择性,最高是1,eg:primary key)(选择性高的也就是唯一性高的)
4.复合索引的主列应该是最有选择性的和where限定条件最常用的列,并以此类推第二列。
5.小于5M的表,最好不要使用索引来查询,表越小,越适合用全表扫描。

复合索引:多个字段组合起来的索引。
建单个索引好还是建复合索引好主要要看字段的唯一性和where条件最常用的列。

六、使用索引的原则
1.查询结果是所有数据行的5%以下时,使用index查询效果最好;
2.where条件中经常用到表的多列时,使用复合索引效果会好于几个单列索引。因为当sql语句所查询的列,
全部都出现在复合索引中时,此时由于 Oracle 只需要查询索引块即可获得所有数据,当然比使用多个单列索引要快得多;
3.索引利于select,但对经常insert,delte尤其update的表,会降低效率。
4.where 子句中的这个字段,必须是复合索引的第一个字段。
5.where子句中的这个字段,不应该参与任何形式的计算:任何对列的操作都将导致表扫描,它包括数据库函数、
计算表达式等等,查询时要尽可能将操作移至等号右边。

要查询的数据在10%以上的,则最好用全表扫描。
要查询的数据在5%以上的,使用index查询效果最好。

索引的类型:
1.B树索引。
2.位图索引。
在修改的时候会锁表。
当字段的唯一性太差的时候,就可以用位图索引。
位图索引一般用于数据仓库,在线事务处理等地方。最经典的是沃尔玛做的一个数据仓库。
3.函数索引。

delete不可以降低水位。


分页sql:
select * from scott.emp;
select deptno,ename,sal from (
select rownum as rn,deptno,ename,sal from
(select deptno,ename,sal from scott.emp where deptno in(10,20) order by sal desc)
where rownum < =5) where rn>2;

删除重复记录sql:
--删除重复数据:方法一
delete from emp_back where rowid in
(select a.rowid from emp_back a, emp_back b where a.rowid>b.rowid and a.empno=b.empno)
--删除重复数据:方法二
delete from emp_back1 where rowid in
(select max(rowid) from emp_back1 a group by a.empno)

怎么把用exists代替in的sql语句:
SELECT dname, deptno FROM dept WHERE deptno NOT IN (SELECT deptno FROM emp);
转换成exist语句
SELECT dname, deptno FROM dept WHERE NOT EXISTS (SELECT deptno FROM emp WHERE dept.deptno = emp.deptno);

怎么把一张表的数据跟新到另一张表:
update emp_back a set comm = (select comm from emp_back1 b where a.empno = b.empno),
sal = (select sal from emp_back1 b where a.empno = b.empno)

物化视图
主要为了提高查询速度,它可以时时更新,也可以定时更新。它是oracle9.2i出来的。它采取的策略就是时间换空间。

oracle分区:
主要是为了提高查询速度,它的原理就是把数据分成几个区存储起来。比如说我们有一亿数据,如果要查某一个时间段的数据,
不采取分区的话,就要在一亿条数据中查找,而我们如果把每个时间段都分成一个区,那么我们就可以在这个时间段的区查找
这条数据。而且我还可以在分区的时候把分区放在不同的磁盘里,这样我们读取数据的时候就可以均匀的在不同磁盘上读取数据,
这样就可以达到I/O均衡。

序列:
取序列当前值:select seq_emp_bak_id.currval from dual;
取序列下一个值:select seq_emp_bak_id.nextval from dual;

怎么在oracle里自动主键的。
使用序列,通过序列自动增长,或者每次把最大主键id的值拿出来加一,或者拿一个表来存储id。
但它们都有缺点:
第一个就是事务回滚它无法恢复,每二个就是事务的问题吧,第三个就是保存id的表也要维护。

oracle里的同义词主要是为了简化操作。
公有同义词:大家都可以用的。
私有同义词:只能自己用,别人不能用。
创建同义词的语句:create synonym emp for scott.emp;

存储过程与函数的区别:
存储过程没有返回值,它一般适合编写一个比较大的功能。它的效率要高,因为存储过程是放在数据库中,所以我们从内存直接到
数据库库读取的。
函数有返回值,它一般适合编写一个比较小的功能。

要知道怎么写一个简单存储过程和函数。

15309015
Windows 系统修复工具主要用于解决 Windows 11/10 系统中的各种常见问题,具有操作简单、功能全面等特点: 文件资源管理器修复:可解决文件资源管理器卡死、崩溃、无响应等问题,能终止崩溃循环。还可修复右键菜单无响应或选项缺失问题,以及重建缩略图缓存,让图片、视频等文件的缩略图正常显示,此外,还能处理桌面缺少回收站图标、回收站损坏等问题。 互联网和连接修复:能够刷新 DNS 缓存,加速网页加载速度,减少访问延迟。可重置 TCP/IP 协议栈,增强网络连接稳定性,减少网络掉线情况,还能还原 Hosts 文件,清除恶意程序对网络设置的篡改,保障网络安全,解决电脑重装系统后网络无法连接、浏览器主页被篡改等问题。 系统修复:集成系统文件检查器(SFC),可自动扫描并修复受损的系统文件。能解决 Windows 激活状态异常的问题,还可重建 DLL 注册库,恢复应用程序兼容性,解决部分软件无法正常运行的问题,同时也能处理如 Windows 沙箱无法启动、Windows 将 JPG 或 JPEG 保存为 JFIF 等系统问题。 系统工具维护:提供启动管理器、服务管理器和进程管理器等工具,用户可控制和管理启动程序、系统服务和当前运行的进程,提高系统的启动和运行速度,防止不必要的程序和服务占用系统资源。还能查看系统规格,如处理器线程数、最大显示分辨率等。 故障排除:集成超过 20 个微软官方诊断工具,可对系统问题进行专业排查,还能生成硬件健康状态报告。能解决搜索和索引故障、邮件和日历应用程序崩溃、设置应用程序无法启动等问题,也可处理打印机、网络适配器、Windows 更新等相关故障。 其他修复功能:可以重置组策略设置、catroot2 文件夹、记事本等多种系统设置和组件,如重置 Windows 应用商店缓存、Windows 防火墙设置等。还能添加重建图标缓存支持,恢复粘滞便笺删除
### Oracle 数据索引概述 合理地使用索引可以极大地提高Oracle数据库中的查询性能[^1]。通过选择适当的索引类型、创建索引覆盖查询、定期维护索引以及使用索引提示和分区等技巧,可以确保索引的最佳利用。 ### 索引类型及其适用场景 Oracle数据库支持多种索引类型,每种类型的索引适用于不同的查询场景: - **B树索引**:这是最常见的索引类型,适合大多数查询操作。它能够快速定位单个记录或范围扫描。 ```sql CREATE INDEX idx_name ON table_name (column_name); ``` - **位图索引**:特别适用于低基数(即不同值较少)的列,如性别字段。位图索引占用空间较小,在OLAP环境中现良好。 ```sql CREATE BITMAP INDEX idx_name ON table_name (column_name); ``` - **函数索引**:当需要频繁执行某些特定函数运算时,可以通过建立函数索引来加速这类查询。需要注意的是,如果where子句中对存在索引的列使用了未被索引化的函数,则可能导致优化器无法有效利用已有的常规索引[^4]。 ```sql CREATE INDEX idx_name ON table_name (function(column_name)); ``` ### 列的选择性考量 考虑列的选择性是决定是否应该为此列创建索引的重要因素之一。高选择性的列意味着该列上的每一个值都相对唯一;而低选择性的列则相反。通常来说,对于那些经常用于过滤条件并且具有较高选择性的列更适合创建索引[^2]。 ### 索引管理与优化建议 为了保持最佳性能状态,应当定期评估现有索引的有效性和影响程度,并据此做出相应调整。这包括但不限于删除不再使用的冗余索引、重建碎片化严重的索引文件等措施。此外,还可以借助于SQL提示来指导查询解析过程优先采用指定路径访问数据内的信息。 ```sql /*+ INDEX(table_name index_name) */ SELECT * FROM table_name WHERE column_name = value; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值