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索引和事务的更多相关文章

  1. Oracle总结第二篇【视图、索引、事务、用户权限、批量操作】

    前言 在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了-那么本篇主要总结关于Oralce视图.序列.事务的一些内容- 在数据库中,我们可以把各种的SQL语句分为四大类- (1 ...

  2. Oracle总结【视图、索引、事务、用户权限、批量操作】

    前言 在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了...那么本篇主要总结关于Oralce视图.序列.事务的一些内容... 在数据库中,我们可以把各种的SQL语句分为四大类 ...

  3. 【转】Oracle索引的类型

    数据库的应用类型分为 OLTP(OnLine Transaction Processing ,联机事务处理):OLTP是传统关系型数据库的主要应用,其主要面向基本的.日常的事务处理,例如银行交易. O ...

  4. ORACLE 索引概述

    索引是数据库中一种可选的数据结构,她通常与表或簇相关.用户可以在表的一列或数列上建立索引,以提高在此表上执行 SQL 语句的性能.就像本文档的索引可以帮助读者快速定位所需信息一样,Oracle 的索引 ...

  5. Oracle数据库之事务

    Oracle数据库之事务 1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个 ...

  6. 【Oracle】浅析Oracle中的事务

    1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不 ...

  7. 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 ...

  8. 小菜鸟之Oracle数据库之事务

    Oracle数据库之事务 1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个 ...

  9. MySQL 索引、事务与存储引擎

               MySQL 索引.事务与存储引擎 1.索引 2.事务 3.存储引擎 1.索引: 索引的概念 : 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址 ...

随机推荐

  1. 哈希-hash

    一. 概念 1.引例 有线性表(1,75,324,43,1353,90,46,-  ) 目的:查找值为90的元素 常见做法: 1.通过一维数组进行遍历查找 (依次比较)( O(n) ) 2.如果关键字 ...

  2. 转:mysql保留关键字

    原文链接:http://www.tuicool.com/articles/Brauq2e 从网上找了一个mysql的保留字列表,仅供参考. ADD ALL ALTER ANALYZE AND AS A ...

  3. mybatis 08: 返回主键值的insert操作 + 利用UUID获取字符串(了解)

    返回主键值的insert操作 应用背景 图示说明 在上述业务背景下,涉及两张数据表的关联操作:用户表 + 用户积分表 传统操作:在对用户表执行完插入语句后,再次查询该用户的uid,将该uid作为外键, ...

  4. 275. H 指数 II--Leetcode_二分

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/h-index-ii 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 题目的大意是 ...

  5. 从HashMap的执行流程开始 揭开HashMap底层实现

    心得:如何学习源码: 从某个执行过程入手,建议先从整体入手,了解底层的数据结构是怎么一步一步优化的.最后,在了解完底层的数据结构优化过程后,从重要的核心方法入手,从它的执行流程入手,先去网上搜索了解它 ...

  6. 如何在Apple Silicon Mac上主动安装Rosetta2

    前提是您的电脑搭载了Apple Silicon处理器 command + space(空格),输入"终端",打开. 输入 : softwareupdate --install-ro ...

  7. eBackup备份服务器安装及配置

    ####### 原博客地址 创建虚拟机 选择第一个 分配硬盘 其余默认 导入压缩包安装eBackup备份软件 用户名root 密码Cloud12#$ 查看ip地址 连接xftp导入包 安装备份软件 # ...

  8. Linux系统启动报错No bootable device解决步骤

    CSDN文章地址点击此处 磁盘的 MBR 表损坏 实验环境准备工作 查看分区类型及磁盘位置信息点击此篇 首先备份虚拟机A上的 MBR 表 dd if=/dev/vda of=MBR bs=512 co ...

  9. 第六章 部署node运算节点服务

    一.部署Kubelet 1.1 集群规划 主机名 角色 IP hdss7-21 kubelet 10.4.7.21 hdss7-22 kubelet 10.4.7.22 注意:部署以10.4.7.21 ...

  10. Java常用类的使用

    Java常用类 1. Optional 在我们的开发中,NullPointerException可谓是随时随处可见,为了避免空指针异常,我们常常需要进行 一 些防御式的检查,所以在代码中常常可见if( ...