SQL基础--索引

索引的概念:

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

常用的索引结构:

  •   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 索引名称;

时间: 2024-10-05 04:02:22

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

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

按逻辑分类: 1.主键索引(聚集索引)(也是唯一索引,不允许有空值) 2.普通索引或单列索引 3.多列索引(复合索引) 4.唯一索引或非唯一索引(非唯一索引其实就是普通/多列索引) 5.空间索引 6.创建索引的基本形式 7.索引的操作 1.查看索引2.创建单列索引3.复合索引4.唯一索引(允许多个空值,每列唯一)5.主键索引(不允许空值,唯一)6.索引的删除7.删除自增auto_increment   6.创建索引的基本形式 create [unique|fulltext|spatial] in

Oracle实践--PL/SQL基础之视图和索引

PL/SQL基础入门之视图和索引         PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. -----------------------------------

(转载)SQL基础--&gt; 约束(CONSTRAINT)

感谢Leshami的分享,原文地址:http://blog.csdn.net/leshami/article/details/5711367 --============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完整性 实体完整性:表中记录不重复(任何两条记录不全等)并且每条记录都有一个非空主键 域完整性:表中字段值必须与字段数据类型.格式.有效范围相吻合 参照完整性:不能引

sql基础之DDL(Data Definition Languages)

好久没写SQL语句了,复习一下. DDL数据定义语言,DDL定义了不同的数据段.数据库.表.列.索引等数据库对象的定义.常用的DDL语句包括create.drop.alter等等. 登录数据:mysql -uroot -p sql 命令一般以英文分号或者\g结束,注意这个\不是/. 1.查看数据库 show databases;注意这个后面的s. 2.创建数据库create database wangking;注意这里没有s. 3.选择数据库use siyecao;列出数据库中的表show ta

SQL Server 索引和表体系结构(三)

原文:SQL Server 索引和表体系结构(三) 包含列索引 概述 包含列索引也是非聚集索引,索引结构跟聚集索引结构是一样,有一点不同的地方就是包含列索引的非键列只存储在叶子节点:包含列索引的列分为键列和非键列,所谓的非键列就是INCLUDE中包含的列,至少需要有一个键列,且键列和非键列不允许重复,非键列最多允许1023列(也就是表的最多列-1),由于索引键列(不包括非键)必须遵守现有索引大小的限制(最大键列数为 16,总索引键大小为 900 字节)的要求所以引进了包含列索引. 正文 创建包含

SQL Server 索引和表体系结构(一)

原文:SQL Server 索引和表体系结构(一) 聚集索引 概述 关于索引和表体系结构的概念一直都是讨论比较多的话题,其中表的各种存储形式是讨论的重点,在各个网站上面也有很多关于这方面写的不错的文章,我写这篇文章的目的也是为了将所有的知识点尽可能的组织起来结合自己对这方面的了解些一篇关于的详细文章出来,同时也会列出一些我自己有疑惑的地方拿出来探讨,介于表达能力有限,有些地方可能无法表达的很明了,还望大家包涵:对于文章中有不对的地方也希望大家能提出,写文章的目的就是为了共享资源:对于这个系列会写

SQL基础语法和函数

SQL常用查询语句和函数 (2012-05-09 09:44:55) 转载▼ 标签: sql查询 函数 sql常用语句 it 分类: SQL SQL SELECT 语法 SELECT 列名称 FROM 表名称 SELECT LastName,FirstName FROM Persons --------------------------------------------------------------------------------- SQL SELECT DISTINCT 语句 在

SQL基础知识回顾整理

20150929~20151016所学SQL基础知识回顾整理,后续完善补充 服务器名称:是指你要连接的安装的数据库服务器所在的那台电脑的ip地址,如果是本机的话,就是  . mdf 结尾:数据库数据文件,一个数据库有且只有一个 ldf:数据库日志文件,一个数据库有且至少有一个 数据库中存放数据的结构,是通过表的形式来存储的,一个数据库中有很多个表 基础知识(创建.使用数据库及创建表.添加数据.删除表) 约束 查询 子查询 表连接 视图 各类函数 存储过程 触发器 分页语句 事务 20150929

SQL Server 索引和表体系结构(聚集索引)

原文:SQL Server 索引和表体系结构(聚集索引) 聚集索引 概述 关于索引和表体系结构的概念一直都是讨论比较多的话题,其中表的各种存储形式是讨论的重点,在各个网站上面也有很多关于这方面写的不错的文章,我写这篇文章的目的也是为了将所有的知识点尽可能的组织起来结合自己对这方面的了解些一篇关于的详细文章出来,同时也会列出一些我自己有疑惑的地方拿出来探讨,介于表达能力有限,有些地方可能无法表达的很明了,还望大家包涵:对于文章中有不对的地方也希望大家能提出,写文章的目的就是为了共享资源:对于这个系