索引的概念:

  在数据库中索引是用于提升数据库查询操作性能的一种手段,但在频繁更新的表上,索引反而会降低性能。

常用的索引结构:

  •   B*树索引
  •   位图索引

B树索引:

  B书索引是最基本的索引结构,Oracle中默认建立的索引类型就是此类型索引,

  一般B数索引在检索高基数数列(该例重复内容较少或没有)的时候可以提供高性能检索

  B书索引采用的就是用的二叉树排列,在叶子节点中有ROWID的值,用ROWID这种方式查询效率是最高的。

 B树索引建立语法:

  create index  [用户名.]索引名称  on [用户名.]表名称 (列名称  [asc|desc])

   --默认是ASC

演示:

--没有建立索引的查询:

SQL> set autotrace on     ##开启自动跟踪功能
SQL> select * from scott.emp where sal<1500;

结果:

已用时间:  00: 00: 00.02

执行计划
----------------------------------------------------------
Plan hash value: 3956160932 --------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 7 | 252 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| EMP | 7 | 252 | 3 (0)| 00:00:01 |
-------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 1 - filter("SAL"<1500) 统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets
8 consistent gets
0 physical reads
0 redo size
1220 bytes sent via SQL*Net to client
520 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
5 rows processed

从中可以看出用了全盘扫描

--建立B数索引

SQL> create index emp_sal_ind on emp(sal);

再次追踪:

已用时间:  00: 00: 00.01

执行计划
----------------------------------------------------------
Plan hash value: 317084801 -------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 7 | 252 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 7 | 252 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | EMP_SAL_IND | 7 | | 1 (0)| 00:00:01 |
------------------------------------------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 2 - access("SAL"<1500) 统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
4 consistent gets
0 physical reads
0 redo size
1238 bytes sent via SQL*Net to client
520 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
5 rows processed

对比上面没建立索引的,可以看出耗费时间和CPU都减少了。

查询用户的索引视图

  --user_indexes

SQL> select index_name,index_type,status  from user_indexes;

Index name               Index type      STATUS
------------------------------ --------------- --------
PK_MID NORMAL VALID
PK_EMP NORMAL VALID
EMP_SAL_IND NORMAL VALID
PK_DEPT NORMAL VALID

主键都自动设置了索引。

--user_ind_columns

查看索引建在哪个字段上

SQL> select * from user_ind_columns where index_name='EMP_SAL_IND';

INDEX_NAME     TABLE_NAME          COLUMN_NAME         COLUMN_POSITION COLUMN_LENGTH CHAR_LENGTH DESCEND
------------------------------ ------------------------------ -----------------------------------------------
EMP_SAL_IND EMP SAL 1 22 0       ASC

位图索引

  适用于低基数列,重复的数据多

创建语法:

  create bitmp index  [用户名.]索引名称  on [用户名.]表名称 (列名称  [asc|desc])

实例:

  --在deptno上建立位图索引

SQL> create bitmap index emp_deptno_ind on emp(deptno);

删除索引:

  由于索引本身要进行数据维护,一般而言会占用较大的磁盘空间,随着表的增长会越来越大,对于那些不经常使用的索引应该删除。

删除语法:

  drop index 索引名称;

SQL基础--索引的更多相关文章

  1. (2.9)Mysql之SQL基础——索引的查看与删除

    (2.9)Mysql之SQL基础——索引的查看与删除 关键词:mysql索引查看,mysql索引删除 1.索引查询(以下包括主键,唯一,普通,复合,全文,但不包括外键) (1)按库查询 select ...

  2. (2.8)Mysql之SQL基础——索引的分类与使用

    (2.8)Mysql之SQL基础——索引的分类与使用 关键字:mysql索引,mysql增加索引,mysql修改索引,mysql删除索引 按逻辑分类: 1.主键索引(聚集索引)(也是唯一索引,不允许有 ...

  3. SQL基础--&gt; 约束(CONSTRAINT)

    --============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...

  4. SQL Server索引进阶:第五级,包含列

    原文地址: Stairway to SQL Server Indexes: Level 5, Included Columns 本文是SQL Server索引进阶系列(Stairway to SQL ...

  5. SQL Server索引进阶:第三级,聚集索引

    原文地址: Stairway to SQL Server Indexes: Level 3, Clustered Indexes 本文是SQL Server索引进阶系列(Stairway to SQL ...

  6. SQL Server索引进阶:第一级,索引简介

    这个并不是我翻译的,全文共有15篇,但我发现好多网站已经不全,所以自己整理. 原文地址: Stairway to SQL Server Indexes: Level 1, Introduction t ...

  7. MySQL基础整理(一)之SQL基础(未完成)

    大家好,我是浅墨竹染,以下是MySQL基础整理(一)之SQL基础 1.SQL简介 SQL(Structure Query Language)是一种结构化查询语言,是使用关系模型的数据库应用语言. 2. ...

  8. [转帖]SQL Server 索引中include的魅力(具有包含性列的索引)

    SQL Server 索引中include的魅力(具有包含性列的索引) http://www.cnblogs.com/gaizai/archive/2010/01/11/1644358.html 上个 ...

  9. 2.Mysql SQL基础

    2.Mysql SQL基础2.1 SQL简介 SQL(Structure Query Language)是结构化查询语言.2.2 SQL使用入门 2.2.1 SQL分类 SQL分为DDL.DML(DQ ...

随机推荐

  1. spring boot 添加jsp支持注意事项

    1.一定要使用war包<packaging>war</packaging>2.将provided改为compile,具体如下: <dependency> <g ...

  2. eclipse自动补全快捷键失效,sysout用不了!

    好久没写Java代码了,使用新版Neon的Eclipse Java EE IDE开发时,自动补全各种失败,sysout也各种用不了, 开始还以为是电脑卡比呢,原来是版本的快捷键不同了,修改方法如下! ...

  3. linux系统无法启动解决方案

    windows和linux双系统一般先安装Windows,分两个主分区,把Linux安装在另外的主分区上.Linux编译内核,添加NTFS分区支持,然后Mount NTFS 分区即可访问Windows ...

  4. jq 弹半透明遮罩层

    jquery制作点击按钮弹出遮罩半透明登陆窗口 // )[^>]*$|^#([\w-]+)$/,M=/^.[^:#\[\.,]*$/,ka=/\S/,$= /^(\s|\u00A0)+|(\s| ...

  5. linux 连接到阿里云服务器

    当Windows拥有xshell软件可以连接到你的远程服务器时,Linux其实自己带有的ssh就可以连接: 具体命令是: ssh root@60.2.5.201.81然后输入你服务器的密码:××××× ...

  6. Subversion Edge

    http://www.collab.net/downloads/subversion#tab-1

  7. python之编写登陆接口(第一天)

    作业:编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 针对此实例写了有二种类型的脚本,略有不同,具体如下: 帐号文件account.txt内容如下: sam 123 david ...

  8. 赶时髦过了一遍Swift 语言....

    Swift 语言 2014年6月3日发布,替代OBJECT-C Swift is a new programming language for creating iOS and OS X apps. ...

  9. Card Flip

    卡牌效果:O(∩_∩)O,只做了webkit浏览器的效果,请用chrome~ 1.首先呢,先用一个框框把卡牌包住,然后呢,搞两个子元素作为卡牌正反面.当然咯,反面是看不见滴~ <section ...

  10. arm 2440 linux 应用程序 nes 红白机模拟器 第1篇

    对比了很多种,开源的 NES 模拟器 VirtuaNES , nestopia , FakeNES , FCEUX , InfoNES , LiteNES 最后决定使用 LiteNES 进行移值,它是 ...