Oracle索引和事务
1. 什么是索引?有什么用?
1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的目录。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。
2)索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率
3)索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表;
4)索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动管理索引,索引删除,不会对表产生影响
5)索引对用户是透明的,无论表上是否有索引,sql语句的用法不变
6)oracle创建主键时会自动在该列上创建索引
2. 索引的底层实现原理
当一列索引创建成功后,oracle系统会这个列复制一个份放入缓存,并按照一定规则做排序和去重,从而减少检索数据的范围。但是索引不是创建的越多越好,因为一个索引的创建,就需要在缓存中开辟一个空间,过多的索引反而会加重数据库的检索速度。
3. 索引的设计理念
1)某个字段在条件查询中会被高频率的调用 where 条件
2)表关联的连接字段 on 条件
3)实际业务需求
4. 索引的分类
1) 唯一索引
主键会默认添加索引
适用:主键
2)BTREE索引(默认索引)
1.oracle中最常用的索引;B树索引就是一颗二叉树;叶子节点(双向链表)包含索引列和指向表中每个匹配行的ROWID值
2.所有叶子节点具有相同的深度,因而不管查询条件怎样,查询速度基本相同
3.能够适应精确查询、模糊查询和比较查询
适用:列基数(列不重复值的个数)大时适合使用B树索引
3)位图索引
创建位图索引时,oracle会扫描整张表,并为索引列的每个取值建立一个位图(位图中,对表中每一行使用一位(bit,0或者1)来标识该行是否包含该位图的索引列的取值,如果为1,表示对应的rowid 所 在的记录包含该位图索引列值),最后通过位图索引中的映射函数完成位到行的ROWID的转换
适用:对于基数小的列适合简历位图索引(例如性别等)
4)单列索引和复合索引
如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引,即至少要包含组合索引的第一列。即索引按照顺序被调用
5. 索引操作
查看索引
select * from user_indexes where TABLE_NAME='EMPLOYEES';
创建BTREE索引
CREATE INDEX index_name on table_name(colum1,colum2…);
创建位图索引
CREATE BITMAP INDEX index_name on table_name(colum1,colum2…);
修改索引
alter index index_name1 rename to index_name2;
删除索引
drop index index_sno;
索引在全局唯一
事务
事务是操作数据库最小的单位,是1条或N条SQL语句组成的逻辑。
四大特性
1. 原子性A(Atomic)
事务是一个整体,不可分割,一起成功or一起失败
2. 一致性C(Consistency)
事务执行前和执行后必须处于一致性状态
3. 隔离性I(Isolation)
多事务并发时,相互独立,互不影响
4. 持久性D(Durability)
数据库数据若不变更,会永久不变
事务会造成的问题
1. 脏读
脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据
2. 不可重复读
不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
3. 幻读
在读写一批数据时,发现读取到的数据不一致,就是发生了幻觉一样
以上问题,都是发生在多事务并发时,数据前后不一致造成的
数据库提供的四种隔离级别:
Read uncommitted(读未提交):最低级别,任何情况都会发生。
Read Committed(读已提交):可避免脏读的发生。
Repeatable read(可重复读):可避免脏读、不可重复读的发生。
Serializable(串行化):避免脏读、不可重复读,幻读的发生。
MySQL默认级别是 可重复读;
Oracle 仅支持读已提交和串行化,默认级别是 读已提交
锁机制
1. 共享锁/乐观锁(Share Locks,即S锁)加了共享锁的数据对象可以被其他事务读取和修改
2. 排它锁/悲观锁(Exclusive Locks,即X锁):当数据对象被加上排它锁时,其他的事务不能对它读取和修改
Oracle索引和事务的更多相关文章
- Oracle总结第二篇【视图、索引、事务、用户权限、批量操作】
前言 在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了-那么本篇主要总结关于Oralce视图.序列.事务的一些内容- 在数据库中,我们可以把各种的SQL语句分为四大类- (1 ...
- Oracle总结【视图、索引、事务、用户权限、批量操作】
前言 在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了...那么本篇主要总结关于Oralce视图.序列.事务的一些内容... 在数据库中,我们可以把各种的SQL语句分为四大类 ...
- 【转】Oracle索引的类型
数据库的应用类型分为 OLTP(OnLine Transaction Processing ,联机事务处理):OLTP是传统关系型数据库的主要应用,其主要面向基本的.日常的事务处理,例如银行交易. O ...
- ORACLE 索引概述
索引是数据库中一种可选的数据结构,她通常与表或簇相关.用户可以在表的一列或数列上建立索引,以提高在此表上执行 SQL 语句的性能.就像本文档的索引可以帮助读者快速定位所需信息一样,Oracle 的索引 ...
- Oracle数据库之事务
Oracle数据库之事务 1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个 ...
- 【Oracle】浅析Oracle中的事务
1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不 ...
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
c#实例化继承类,必须对被继承类的程序集做引用 0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...
- 小菜鸟之Oracle数据库之事务
Oracle数据库之事务 1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个 ...
- MySQL 索引、事务与存储引擎
MySQL 索引.事务与存储引擎 1.索引 2.事务 3.存储引擎 1.索引: 索引的概念 : 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址 ...
随机推荐
- 题解 P1999【覆盖墙壁】
数学题 令 \(A_n\) 为 \(2\times n\) 的墙壁放满块的方案数,考虑递推. 显然 \(A_0=1\),我们令对于 \(k<0\),\(A_k=0\) . 放直线型的块非常好递推 ...
- 一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_200 时光荏苒,过隙白驹,即将进入2022年,著名敏捷开发语言Python也放出了3.10最终版,本次我们来展示一下在不同的系统和 ...
- .NET 7 发布的最后一个预览版Preview 7, 下个月发布RC
微软在2022年8月9日 发布了.NET 7 Preview 7[1],这是它在11月10日 RTM 之前进入发布候选阶段之前的最后预览版. 预览版 7 已在 Visual Studio 17.4 预 ...
- MyBatis-Plus(二、常用注解)
1.@TableName @TableName 用法:映射数据库的表名,如果数据库表名与实体类名不一致,用@TableName来映射. package com.example.mybatisplus. ...
- 深入分析FragmentPagerAdapter和FragmentStatePagerAdapter
最近遇到比较奇怪的bug,TableLayout+ViewPager实现点击顶部tab切换viewpager视图.但是在Viewpager设置dapter时,最开始设置的是FragmentPagerA ...
- HCIA-Datacom 2.2 实验:OSPF路由协议基础实验
前言:才发现IA也要学OSPF,忍不住吐槽一句,现在太卷了! OSPF简介: 开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网 ...
- Python自学教程8-数据类型有哪些注意事项
不知不觉,python自学教程已经更新到第八篇了,再有几篇,基本的语法就介绍完了. 今天来总结一下数据类型有哪些需要注意的地方. 元组注意事项 元组是另一种经常使用到的数据类型,看上去和列表差不多.它 ...
- 青源Talk第8期|苗旺:因果推断,观察性研究和2021年诺贝尔经济学奖
biobank 英国的基金数据因果推断和不同的研究互相论证,而非一个研究得到的接了就行.数据融合,data fusion,同一个因果问题不同数据不同结论,以及历史上的数据,来共同得到更稳健.更高效的推 ...
- 【Java】学习路径51-线程组
平时创建线程的时候,系统会默认为线程分组. 我们可以使用 ThreadGroup tg1 = t1.getThreadGroup(); 取得t1的线程组对象. 然后使用getName获得线程组名称. ...
- 【java】学习路线12-内部类的使用事项
//内部类只能在其外部类当中使用//局部内部类:定义在方法里面//如果内部类和外部类有重名,就近原则在内部类中优先访问内部类.//如果想访问宿主类的同名成员,使用OuterClass.this.xxx ...