iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >oracle索引总结
  • 407
分享到

oracle索引总结

2024-04-02 19:04:59 407人浏览 独家记忆
摘要

目录一、简介二、索引原理三、索引使用(创建、修改、删除、查看)1.创建索引语法2.修改索引3.重建索引3.删除索引4.查看索引四、索引分类1. B树索引2. 位图索引3.单列索引和复

一、简介

说明:

  1. 索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。
  2. 索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率
  3. 索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表;
  4. 索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动管理索引,索引删除,不会对表产生影响
  5. 索引对用户是透明的,无论表上是否有索引,sql语句的用法不变
  6. oracle创建主键时会自动在该列上创建索引

二、索引原理

  • 若没有索引,搜索某个记录时(例如查找name='wish')需要搜索所有的记录,因为不能保证只有一个wish,必须全部搜索一遍
  • 若在name上建立索引,oracle会对全表进行一次搜索,将每条记录的name值哪找升序排列,然后构建索引条目(namerowid),存储到索引段中,查询namewish时即可直接查找对应地方
  • 创建了索引并不一定就会使用,oracle自动统计表的信息后,决定是否使用索引,表中数据很少时使用全表扫描速度已经很快,没有必要使用索引

三、索引使用(创建、修改、删除、查看)

1.创建索引语法


CREATE [UNIQUE] | [BITMAP] INDEX index_name  --unique表示唯一索引
ON table_name([column1 [ASC|DESC],column2    --bitmap,创建位图索引
[ASC|DESC],…] | [express])
[TABLESPACE tablespace_name]
[PCTFREE n1]                                 --指定索引在数据块中空闲空间
[STORAGE (INITIAL n2)]
[NOLOGGING]                                  --表示创建和重建索引时允许对表做DML操作,默认情况下不应该使用
[NOLINE]
[NOSORT];                                    --表示创建索引时不进行排序,默认不适用,如果数据已经是按照该索引顺序排列的可以使用

2.修改索引

1)重命名索引


alter index index_sno rename to bitmap_index;


2) 合并索引

(表使用一段时间后在索引中会产生碎片,此时索引效率会降低,可以选择重建索引或者合并索引,合并索引方式更好些,无需额外存储空间,代价较低)


alter index index_sno coalesce;


3.重建索引

方式一:删除原来的索引,重新建立索引

方式二:


alter index index_sno rebuild;


3.删除索引


drop index index_sno;


4.查看索引


select index_name,index-type, tablespace_name, uniqueness from all_indexes where table_name ='tablename';

 -- eg:    
create index index_sno on student('name');
select * from all_indexes where table_name='student';

四、索引分类

1. B树索引

(默认索引,保存讲过排序过的索引列和对应的rowid值)

1)说明:

  1. oracle中最常用的索引;B树索引就是一颗二叉树;叶子节点(双向链表)包含索引列和指向表中每个匹配行的ROWID
  2. 所有叶子节点具有相同的深度,因而不管查询条件怎样,查询速度基本相同
  3. 能够适应精确查询、模糊查询和比较查询

2)分类:

   UNIQUE,NON-UNIQUE(默认),REVERSE KEY(数据列中的数据是反向存储的)

3)创建例子


craete index index_sno on student('sno');
 

4)适合使用场景:

列基数(列不重复值的个数)大时适合使用B数索引

2. 位图索引

1)说明:

1.创建位图索引时,oracle会扫描整张表,并为索引列的每个取值建立一个位图(位图中,对表中每一行使用一位(bit,0或者1)来标识该行是否包含该位图的索引列的取值,如果为1,表示对应的rowid所在的记录包含该位图索引列值),最后通过位图索引中的映射函数完成位到行的ROWID的转换

2)创建例子


create bitmap index index_sno on student(sno);


3) 适合场景:

对于基数小的列适合简历位图索引(例如性别等)

3.单列索引和复合索引(基于多个列创建)

1) 注意:

  即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引,即至少要包含组合索引的第一列

4. 函数索引

1)说明:

  1. 当经常要访问一些函数或者表达式时,可以将其存储在索引中,这样下次访问时,该值已经计算出来了,可以加快查询速度

  2. 函数索引既可以使用B数索引,也可以使用位图索引;当函数结果不确定时采用B树索引,结果是固定的某几个值时使用位图索引

  3. 函数索引中可以水泥用lentrimsubstrupper(每行返回独立结果),不能使用如summaxminavg

 2)例子:


create index fbi  on student (upper(name));
select * from student where upper(name) ='WISH';


五、索引建立原则总结

  1. 如果有两个或者以上的索引,其中有一个唯一性索引,而其他是非唯一,这种情况下oracle将使用唯一性索引而完全忽略非唯一性索引
  2. 至少要包含组合索引的第一列(即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引)
  3. 小表不要简历索引
  4. 对于基数大的列适合建立B树索引,对于基数小的列适合简历位图索引
  5. 列中有很多空值,但经常查询该列上非空记录时应该建立索引
  6.  经常进行连接查询的列应该创建索引
  7. 使用create index时要将最常查询的列放在最前面
  8. LONG(可变长字符串数据,最长2G)和LONG RAW(可变长二进制数据,最长2G)列不能创建索引
  9. 限制表中索引的数量(创建索引耗费时间,并且随数据量的增大而增大;索引会占用物理空间;当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度)

注意事项:

1. 通配符在搜索词首出现时,oracle不能使用索引,eg:


--我们在name上创建索引;

create index index_name on student('name');

--下面的方式oracle不适用name索引

select * from student where name like '%wish%';

--如果通配符出现在字符串的其他位置时,优化器能够利用索引;如下:

select * from student where name like 'wish%';

 2. 不要在索引列上使用not,可以采用其他方式代替如下:(oracle碰到not会停止使用索引,而采用全表扫描)


select * from student where not (score=100);

select * from student where score <> 100;

--替换为

select * from student where score>100 or score <100

 3. 索引上使用空值比较将停止使用索引, eg:


select * from student where score is not null;

到此这篇关于oracle索引总结的文章就介绍到这了,更多相关oracle索引内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: oracle索引总结

本文链接: https://www.lsjlt.com/news/136397.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle索引总结
    目录一、简介二、索引原理三、索引使用(创建、修改、删除、查看)1.创建索引语法2.修改索引3.重建索引3.删除索引4.查看索引四、索引分类1. B树索引2. 位图索引3.单列索引和复...
    99+
    2024-04-02
  • Python:索引总结
    Python包含6种内建序列: 列表 元组 字符串 Unicode字符串 buffer对象 xrange对象 索引 #字符串可以直接使用索引,不需要专门的变量引用 >>> 'Hello World!'[0]...
    99+
    2023-01-31
    索引 Python
  • MySQL索引总结(Index Type)
    目录mysql Index1.创建和删除索引2. 索引类型MySQL Index 索引是一种数据结构,可以是B-tree、R-tree、或者hash结构。其中,B-tree适用于查找某范围内的数据,可以快速地从当前数据找...
    99+
    2023-02-05
    MySQL Index Type MySQL索引
  • python改变索引总结
    #coding:utf8 import pandas as pd import numpy as np data = pd.DataFrame(np.arange(9).reshape(3,3),index=['a','b','c'],...
    99+
    2023-01-31
    索引 python
  • MySQL索引总结(Index Type)
    目录MySQL Index1.创建和删除索引2. 索引类型MySQL Index 索引是一种数据结构,可以是B-tree、R-tree、或者hash结构。其中,B-tree适用于查找...
    99+
    2023-02-05
    MySQL Index Type MySQL索引
  • MySQL的复合索引总结
    目录1.背景2.认识复合索引3.最左匹配原则4.字段顺序的影响5.单字段是否可以触发索引?7.复合索引可以替代单一索引吗?1.背景 最近频繁出现慢SQL导致系统性能...
    99+
    2024-04-02
  • Oracle中B-Tree、Bitmap和函数索引使用案例总结
    目录 一、索引简介 1、索引是一个独立的数据库对象,和数据表table一样。在Oracle中,数据库对象object都是通过段segment结构表示。我们在数据字典dba_seg...
    99+
    2024-04-02
  • 总结数据库建表/SQL/索引规范
    这篇文章主要介绍“总结数据库建表/SQL/索引规范”,在日常操作中,相信很多人在总结数据库建表/SQL/索引规范问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”总结数据库建表/...
    99+
    2024-04-02
  • MySQL优化中B树索引知识点总结
    为什么要进行SQL优化呢?很显然,当我们去写sql语句时: 1会发现性能低 2.执行时间太长, 3.或等待时间太长 4.sql语句欠佳,以及我们索引失效 5.服务器参数设置不合理 S...
    99+
    2024-04-02
  • NumPy索引与切片的用法示例总结
    前言 索引和切片是NumPy中最重要最常用的操作。熟练使用NumPy切片操作是数据处理和机器学习的前提,所以一定要掌握好。 参考NumPy官方文档,总结NumPy索引和切片,可以看到...
    99+
    2024-04-02
  • MySQL索引优化的性能分析和总结
    本篇内容主要讲解“MySQL索引优化的性能分析和总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL索引优化的性能分析和总结”吧!案例分析我们先简单了解...
    99+
    2024-04-02
  • oracle怎么备份表结构和索引
    要备份Oracle数据库中的表结构和索引,可以使用以下方法: 使用expdp和impdp工具备份和恢复整个数据库。expdp用于...
    99+
    2024-04-09
    oracle
  • MySQL分区建索引以及分区介绍总结
    目录MySQL 分区建索引介绍MySQL 分区介绍介绍总结MySQL 分区建索引介绍 mysql分区后每个分区成了独立的文件,虽然从逻辑上还是一张表其实已经分成了多张独立的表,从&l...
    99+
    2024-04-02
  • NumPy对数组按索引查询实战方法总结
    目录前期准备及前情回顾基础索引一维数组二维数组神奇索引一维数组二维数组0         &...
    99+
    2024-04-02
  • Oracle 11g R2 索引
    索引是oracle提供的一个对象,提供了一种快速访问数据的途径,提高了数据库的检索性能。索引使数据库程序无需对整个表进行全表扫描,就可以在其中找到所需要的数据,就想书的目录,可以通过他快速查找所需信息,无需...
    99+
    2024-04-02
  • 【从删库到跑路 | MySQL总结篇】索引的详细使用
    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论...
    99+
    2023-12-23
    mysql android 数据库
  • ORACLE sid,pid,spid总结
    概念上:1.spid (system process id)  是操作系统层面的进程id .2.pid(process id)  这个是基于oracle的进程id个人理解为就是oracle给自己的进程...
    99+
    2023-06-06
  • MySQL性能优化与索引设计的项目经验总结
    MySQL是一种常用的关系型数据库管理系统,广泛应用于各种Web应用和企业级系统中。在开发和维护MySQL数据库时,性能优化和索引设计是非常关键的环节。本文将基于作者在项目中的经验总结MySQL性能优化和索引设计的一些实践方法和技巧。一、了...
    99+
    2023-11-02
    MySQL性能优化 (Performance Optimization) 索引设计 (Index Design) 项目经
  • Mysql事务索引知识汇总
    目录一、事务1. 事务特性2. 事务并发时出现的问题二、索引1. 索引使用2. 索引类型3. 索引注意原则三、SQL1. SQL优点2. SQL分类3. SQL语法及关键字 &nbs...
    99+
    2024-04-02
  • Oracle索引状态查询&索引重建
    --检查损坏索引 SELECT status, COUNT(*)   FROM dba_indexes  GROUP...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作