定义:

数据库索引好比是一本书前面的目录,能加快数据库的查询速度.

 

优点:

例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),在索引中查找,但索引是经过某种算法优化过的,查找次数要少的多的多。可见,索引是用来定位的。
索引分为聚簇索引非聚簇索引两种,聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

定义:

为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

优化:

索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引:
在经常需要搜索的列上,可以加快搜索的速度;
  • 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
  • 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
  • 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
  • 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
同样,对于有些列不应该创建索引。一般来说,不应该创建索引的的这些列具有下列特点:
  • 第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
  • 第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
  • 第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少,不利于使用索引。
  • 第四,当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改操作远远多于检索操作时,不应该创建索引。

创建索引:

最普通的情况,是为出现在where子句的字段建一个索引。为方便讲述,先建立一个如下的表。
CREATE TABLE mytable(
idserial                 primary key,
category_id          int   not null   default0,
user_id                int   not null   default0,
adddate               int   not null   default0
);
如果在查询时常用类似以下的语句:
SELECT * FROM mytable WHERE category_id=1;
最直接的应对之道,是为category_id建立一个简单的索引:
CREATE INDEX mytable_categoryid ON mytable (category_id);
OK.如果有不止一个选择条件呢?例如:
SELECT * FROM mytable WHERE category_id=1 AND user_id=2;
第一反应可能是,再给user_id建立一个索引。不好,这不是一个最佳的方法。可以建立多重的索引。
创建多个索引:
CREATE INDEX mytable_category id_userid ON mytable(category_id,user_id);
格式:
CREATE INDEX 索引名 ON 表名(列名)
删除索引:
DROP INDEX index_name [ON table_name]
由于oracle中要求索引的名字为唯一的,所以当删除索引时不必指明表名。对于Microsoft Access、Microsoft SQL Server和MySQL,一个表中索引名唯一,但在不同的表中可以使用相同的索引名,因此必须指明要删除的索引的表名.
获得已经存在的索引:
使用 select * from user_tables 可以查询出所有的用户表
使用 select * from user_indexes 可以查询出所有的用户表索引
其他:

1.查看所有用户

select * from all_users;    -------查看所有的用户

select * from user_users; --------查看当前用户

2.查看用户或角色系统权限:

select * from user_sys_privs; --------查看当前用户的权限

3.查看角色所包含的权限

select * from role_sys_privs;   -------

4.查看用户对象权限

select * from all_tab_privs;   --------查看所用的用户的可操作表权限
     select * from user_tab_privs; --------查看当前用户的表可操作权限

5.查看用户或角色所拥有的角色

select * from user_role_privs;   ------查看当前用户的角色

select * from user_constraints where TABLE_NAME='?';    -----查看某一个表的约束

6.查看用户下的索引

1.  select  * from user_indexes-          -----查看当前用户下的所有索引

2.  select  * from user_indexes where table_name='A';      -----查看当前用户下表A的索引
      (drop index index_name去掉索引)

3. select index_name,index_type,status,blevel from user_indexes where table_name = '?';

-----查看某一个表的所有索引

4.  select table_name, index_name, column_name, column_position from        user_ind_columns where  table_name='?';    ----查看索引的构成

7. 建索引

create unique clustered index 索引名on 表名(字段1)  --单索引

Create index 索引名 on 表名(字段1,字段2)  -------复合索引

数据库(oracle) 索引相关推荐

  1. 定时创建oracle索引,oracle数据库关于索引建立及使用的详细介绍

    索引的说明 索引是与表相关的一个可选结构,在逻辑上和物理上都独立于表的数据,索引能优化查询,不能优化DML操作,Oracle自动维护索引,频繁的DML操作反而会引起大量的索引维护. 如果SQL语句仅访 ...

  2. oracle 索引_分享三个Oracle数据库索引监控脚本,值得收藏

    概述 我们在维护业务系统时,可能会建立很多索引,那么这些索引的使用到底怎么样,是否有些索引一直都没有用到过,那么oracle 是如何监控索引的使用状况,是否可以清除它们? 监控索引 一般有两种方式: ...

  3. Oracle数据库(索引、视图、伪列与伪表)

    引用推荐博客.数据库网址 http://www.educity.cn/shujuku/1598602.html(希赛数据库学院) http://blog.csdn.net/kingzone_2008/ ...

  4. oracle or索引失效_oracle数据库中索引会失效的几种情况

    创建Oracle 索引的目的是为了避免全表扫描数据,提高查询效率,但是如果sql语句写的不好致使索引失效,反而会影响数据查询效率.以下几种情况就会导致索引失效: 没有 WHERE 子句 众所周知,添加 ...

  5. oracle数据库中索引会失效的几种情况

    创建Oracle 索引的目的是为了避免全表扫描数据,提高查询效率,但是如果sql语句写的不好致使索引失效,反而会影响数据查询效率.以下几种情况就会导致索引失效: 1. 没有 WHERE 子句 众所周知 ...

  6. [转载]oracle索引的简单总结

    原文地址:oracle索引的简单总结作者:kindle 一.索引的概念: 数据库的索引类似于书籍的索引.在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息.在数据库中,索引也允许数据库程 ...

  7. oracle索引总结

    1.说明 1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引.在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息. ...

  8. oracle不开归档对效率会快吗,关于性能:存档庞大的数据库(oracle),而不会影响向其插入记录的进程...

    我们有一个审计数据库(oracle),它保存部署在应用程序服务器上的服务(大约100个)执行的所有活动的监视器信息.您可能认为审计数据库非常庞大,因为服务处理的请求数量很大.此数据库上唯一的写入事务是 ...

  9. 【Oracle】Oracle索引

    在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快.索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容. 对于数据库来说,索引是一个必选项,但对于现 ...

最新文章

  1. 曲面拟合之最小二乘法(矩形域)
  2. PHP显示今天、今月、上月、今年的起点/终点时间戳
  3. 【django】视图和URL
  4. linux pidof用法,科技常识:Linux pidof命令使用总结
  5. AI 换脸冲上 GitHub TOP1,如何一键生成亲妈都不认识的自己?
  6. “技术需求”与“技术成果”项目之间关联度计算模型 复赛top1解决方案
  7. 顺利通过EMC实验(13)
  8. map/reduce之间的shuffle,partition,combiner过程的详解
  9. virtualbox启动后一直黑窗_UBUNTU18.04 安装virtualbox-6.0,出现rc=-1908问题解决方法
  10. Cesium:通过字符串创建颜色
  11. 网络流24题 洛谷 2763 试题库问题
  12. 办公神器,专治低效——特色功能软件工具
  13. 怎么下载安装Firebug和使用Firebug
  14. 如何设计一个秒杀系统?
  15. java下载文件下载不动_JAVA实现文件下载,浏览器端得到数据没反应
  16. 嵌入式编程经典书籍推荐
  17. home为什么是地点副词_home为什么可以做副词
  18. JAVA-DDD项目结构
  19. 【GreenDao学习笔记】SQLite数据库保存float/double小数类型精度丢失
  20. Phi-divergence

热门文章

  1. 《网页设计与前端开发 Dreamweaver+Flash+Photoshop+HTML+CSS+JavaScript 从入门到精通》—— 第1章 网页设计基础知识...
  2. weblogic启动脚本
  3. html5 worker的使用场景
  4. TCP滑动窗口机制深度剖析
  5. Django基础-Web框架-URL路由
  6. RocketMQ源码解析-Broker的消息存储
  7. python 碎片图像拼接_python实现图像拼接
  8. PHP SESSION生存时间设置
  9. java运输_JAVA-基础-方法
  10. 打开c语言运行不了_C语言——菜鸟和大神的分水岭:内存、线程、进程