浅谈oracle数据库索引

[什么是索引]

在关系型数据库中,索引是一种和表有关的数据结构,它可以使查询的sql语句执行的更快。其实索引就如同图书的目录,我们可以根据目录中的页码快速的找到所需的内容。

编写一本书,只有章节内容定好之后再设置目录;数据库索引也是一样,只有先插入好数据,再建立索引。

[为何索引可提高查询效率]

因为DB在执行一条sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。

[如何创建索引]

创建表:

create table person (id int, sex char(1), name char(10));

创建索引:

create index person_index on person (id);

查看创建的表与索引:

select object_name, object_type from user_objects;

除了可以根据单个字段创建索引,也可以根据多列创建索引:

create index person_index2 on person (sex, name);

删除索引:

drop index person_index;

[创建索引的注意事项]

1. 建立索引的目的是为了提高查询效率,但建立的索引过多会影响插入和删除数据的速度,这是因为我们修改表数据时,索引也要跟着修改,所以创建索引的时候我们需要权衡是查询多还是修改多。

2. 应该创建索引的字段:

① 经常作为查询条件的字段

② 经常用在多表连接的列,例如外键

③ 经常需要排序的字段

3. 应该少建或者不建索引的情况:

① 表中数据太少,增加索引基本不会带来查询速度的提升,反而浪费了存储空间。

② 经常需要插入、修改、删除操作的表

③ 表中数据重复且分布平均的字段(如“性别”)

④ 查询中很少用到不应该创建索引

⑤ 定义为text、image、bit数据类型的列不应该加索引

4. 一些sql的写法会限制索引的使用:

where子句中如果使用in、or、like、!= 、<>均会导致索引不能正常使用,将<>换成>and
<,将is not null换成>=chr(0)

时间: 2024-10-05 22:39:35

浅谈oracle数据库索引的相关文章

浅谈Oracle数据库分区表

Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,之前,只听过分区的大名,却总未用过,最近简单学习了一下,总结如下,不对之处,还希望朋友们多多指点,交流! 1.表空间及分区表的概念    2.表分区的具体作用    3.表分区的优缺点    4.表分区的几种类型及操作方法    5.对表分区的维护性操作. ( 1.) 表空间及分区表的概念    表空间:       是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间.

浅谈oracle数据库dbtime

1.如果等待时间比服务时间长很多,那我们就要优化等待时间,如果服务时间比等待时间长很多,就要先优化服务时间 这就是owi思想 那我们就需要判断整个数据库系统平均响应时间中服务时间(Service time)和等待时间(Wait time)各占的百分比.服务时间代表的是" CPU used by this session",是CPU服务会话所花费的所有时间.Response Time = Service Time + Wait TIme(即响应时间=cpu服务时间+等待时间) selec

SQL Server和Oracle数据库索引介绍

SQL Server和Oracle数据库索引介绍 1 SQL Server中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度.索引包含由表或视图中的一列或多列生成的键.这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行. 表或视图可以包含以下类型的索引: 聚集索引 聚集索引根据数据行的键值在表或视图中排序和存储这些数据行.索引定义中包含聚集索引列.每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序. 只有当表包含聚集索引

浅谈oracle中rowid和rownum

[ 概要 ] 刚刚接触oracle的同学可能常常会被rowid和rownum这两个词弄混, 弄清楚这两个家伙对于我们写sql会有很大的帮助, 下面偶就抛砖引玉, 简单地谈谈他们之间的区别吧. [ 比较 ] rowid和rownum都是oracle中的伪列, 但他们还是存在本质区别: rowid: 是物理地址, 用于定位数据表中数据的位置, 它是唯一的且不会改变. rownum: 是根据查询的结果集给每行分配的一个逻辑编号, 查询结果不同, rownum自然不同. 对于同一条记录, 查询条件不同,

浅谈分布式数据库

基本概念 1) 单库,就是一个库 ? 2) 分片(sharding),分片解决扩展性问题,引入分片,就引入了数据路由和分片键的概念.分表解决的是数据量过大的问题,分库解决的是数据库性能瓶颈的问题. ? 3) 分组(group),分组解决可用性问题,分组通常通过主从复制(replication)的方式实现.(各种可用级别方案单独介绍) ? 4) 互联网公司数据库实际软件架构是(大数据量下):又分片,又分组(如下图) 数据分片简介和问题 数据分片是按照某个维度将存放在单一数据库中的数据分散地存放至多

【Oracle】7.由B-Tree算法谈Oracle的索引

索引 1.B树索引(B-TREE) B树索引是我们日常工作最最常用的索引,大家平时在工作中说的"索引"默认都是B树索引: 索引其实很简单,也很容易理解,用一本书的目录来形容最为贴切了,B树索引的结构跟图书馆的目录也很像. 2.B树索引的结构: 索引的顶层为根,它包括指向索引中下一层次的条目.下一层次为分支块,它又指向位于索引中下一层索引中下一层次的块,最底层的是叶节点,它包含指向表行的索引条目.叶块是双向关联的,这边与按键值升序或降序扫描索引: 3.索引叶条目的格式 一个索引条目包含以

运维角度浅谈MySQL数据库优化

一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计.对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验.影响的因素很多,比如慢查询.低效的查询语句.没有适当建立索引.数据库堵塞(死锁)等.当然,有测试工程师的团队

浅谈MySQL数据库优化

一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计.对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验.影响的因素很多,比如慢查询.低效的查询语句.没有适当建立索引.数据库堵塞(死锁)等.当然,有测试工程师的团队

oracle数据库索引(转)

.      索引分类Ø  按存储方法分类B*树索引:B*树索引是最常用的索引,其存储结构类似书的索引结构,有分支和叶两种类型的存储数据块,分支块相当于书的大目录,叶块相当于索引到的具体的书页.一般索引及唯一约束索引都使用B*树索引. 位图索引:位置索引储存在主要用来节省空间,减少Oracle对数据块的访问,它采用位图偏移方式来与表的行ID对应,采用位图索引一般是重复值太多的表字段.位图索引在实际密集型OLTP(数据事务处理)中用得比较少,因为OLTP会对表进行大量的删除.修改.新建操作,Ora