`

Oracle初学者入门指南-索引是干什么用的?

阅读更多

关于索引是什么的最简单的比喻是,索引之于表数据如同目录之于一本书。
通过目录的页码我们可以快速的定位一个内容,同样通过索引记录的rowid我们可以快速的定位一条数据。

如同目录很难针对书中每个字词一样,索引也很难针对所有字段。
我们通常索引最能代表章节,记录属性的内容。
索引并非总能带来性能提升,但是通常情况下,索引能加快访问,所以建表的时候,你一定要知道还有索引这样一类对象。

下面这个案例是我们绝对不应该和不想看到的。

今天一个部门报数据库巨慢无比,上去看了一下,抓到如下的SQL:

SQL> select sql_text
  2  from v$sqltext a
  3  where a.hash_value = (
  4  select sql_hash_value from v$session b
  5  where b.sid='&sid'
  6  )
  7  order by piece asc
  8  /

SQL_TEXT
----------------------------------------------------------------
select * from i_cm_power t WHERE T.SJH='13911xxxxx6'


检查了一下该查询访问的数据表,居然一个索引都没有:

SQL> select index_name from dba_indexes where table_name=upper('i_cm_power');

INDEX_NAME
------------------------------


没有索引意味着,即使为了获取这一条记录,Oracle也必须对5.28G的一个表进行全表扫描,如果不慢那就怪了:

SQL> col segment_name for a20
SQL> select segment_name,bytes/1024/1024/1024 
     from dba_segments where segment_name=upper('i_cm_power');

SEGMENT_NAME         BYTES/1024/1024/1024
-------------------- --------------------
I_CM_POWER                  5.28173828125


创建一个索引再说:

SQL> create index idx_i_cm_power_sjh on i_cm_power(sjh);

Index created.

Elapsed: 00:20:50.73

SQL> col segment_name for a20
SQL> select segment_name,bytes/1024/1024 MB 
  2  from dba_segments where segment_name=upper('idx_i_cm_power_sjh');

SEGMENT_NAME                 MB
-------------------- ----------
IDX_I_CM_POWER_SJH         1360

SQL> 


无疑这个索引对于这样的简单查询是大有益处的:

SQL> select * from i_cm_power t WHERE T.SJH='13911xxxxx6';

Elapsed: 00:00:00.07

Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'I_CM_POWER'
   2    1     INDEX (RANGE SCAN) OF 'IDX_I_CM_POWER_SJH' (NON-UNIQUE)


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          6  consistent gets
          0  physical reads
          0  redo size
       1022  bytes sent via SQL*Net to client
        503  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          2  rows processed


然而在实际中,你需要考虑更多的因素。
增加索引会占用更多的存储空间;索引的维护会增加数据库的负担,如果有海量的数据加载,可能会极大影响性能...

所以事实可能总是比你想象的更复杂,你只有知道的更多...

分享到:
评论

相关推荐

    oracle初学者指南1-5

    "Oracle初学者指南1-5"涵盖了Oracle数据库系统的入门内容,包括数据库概念、安装配置、SQL语言、数据管理以及基本的数据库管理操作。 1. **数据库概念**: Oracle数据库是基于结构化查询语言(SQL)的数据存储系统,...

    Oracle Database 11g初学者指南--详细书签版

    总体来看,《Oracle Database 11g初学者指南》为初学者提供了一条清晰的学习路径,无论是对于想要从事数据库管理和开发的专业人士,还是需要使用Oracle数据库的企业用户,本书都是一个很好的起点。通过对书中内容的...

    oracle初学者指南7-8

    对于初学者来说,掌握Oracle的基本概念、操作和管理是至关重要的。本指南将聚焦Oracle的第7-8章,深入浅出地讲解Oracle的核心知识点。 在第7章,我们主要会接触到的是Oracle的数据类型和表的创建。Oracle支持多种...

    《oracle 8i 初学者入门》--电子版

    Oracle 8i是Oracle数据库系统的一个早期版本,它在20世纪末期广泛使用,并为许多初学者提供了学习数据库管理的基础。《Oracle 8i 初学者入门》这本书旨在帮助新接触Oracle数据库的人理解其核心概念和操作。下面将...

    oracle初学者指南

    以下是一份详细的"Oracle初学者指南",旨在帮助初学者系统地学习Oracle。 一、Oracle简介 Oracle数据库是由美国Oracle公司开发的,它提供了数据存储、事务处理、备份恢复、性能优化等全面功能。Oracle支持多种操作...

    Oracle 9i初学者指南

    Oracle 9i初学者指南是一本专为对数据库管理感兴趣的初学者设计的教程,它涵盖了Oracle 9i数据库系统的基础知识、安装配置、管理和维护等多个重要方面。Oracle 9i是Oracle公司推出的一个重要版本,引入了许多创新...

    oracle经典书籍(Oracle 9i初学者指南.zip、Oracle专家高级编程.pdf、Effective+Oracle+by+Design.pdf)

    首先,“Oracle 9i初学者指南.zip”这本资料专注于Oracle 9i版本的基础学习。Oracle 9i是Oracle公司的一个里程碑产品,作为当时世界上最先进和功能最强大的数据库之一,它提供了包括Real Application Clusters(RAC...

    Oracle初学者指南.pdf

    以下是对"Oracle初学者指南.pdf"中可能涵盖的一些核心知识点的详细介绍: 1. **Oracle简介**:Oracle数据库系统由美国Oracle公司开发,它提供了数据存储、数据安全、事务处理、备份恢复等一系列功能。Oracle支持...

    Oracle 初学者指南

    本书介绍由著名的Oracle公司研制、开发的大型数据库软件Oracle8的各项功能、操作要领,阐明了所谓的“网络计算”,并讨论了Oracle公司的... 本书为初学者和其他希望进一步掌握、了解Oracle的人员提供了服务器技术概览

    Oracle初学者指南

    通过深入学习"Oracle 8 初学者指南",你将逐步掌握Oracle的基础知识,并具备解决实际问题的能力。随着经验的积累,你可以在数据库领域走得更远,如数据库设计、性能调优、故障排除等高级话题。Oracle的学习是一段...

    oracle初学者指南16~18

    "Oracle初学者指南16~18"可能涵盖了数据库设计、SQL查询以及数据库管理等核心主题。 第16章:SQL基础 在这一章,你将学习SQL(结构化查询语言),它是与Oracle数据库交互的基础。内容可能包括: 1. 数据库查询:...

    oracle数据库 oracle初学者入门

    通过深入学习上述知识点,并结合提供的压缩包文件,如"oracle初学者1000问"、"oracle初学者指南"、"oracle9i手册"和"oracle的入门心得",初学者可以逐步建立起对Oracle数据库的全面认识,并逐渐提升实践操作能力。...

    oracle初学者1000问+oracle命令速查v

    "Oracle初学者1000问+Oracle命令速查v"提供了丰富的学习资源,帮助你快速入门并提升技能。下面将详细阐述一些Oracle数据库的基础知识和常用命令。 1. **Oracle数据库基础** - 数据库概念:Oracle数据库是一种存储...

    ORACLE+DATABASE+11G初学者指南

    ORACLE DATABASE 初学者指南

    oracle9i初学者入门教程下载

    本教程旨在为初学者提供一个全面的Oracle 9i学习指南,帮助他们理解数据库的基本概念,掌握数据库管理系统的使用,并逐步成长为熟练的Oracle DBA(数据库管理员)。 首先,我们需要了解Oracle数据库的基础知识。...

    oracle11g初学者指南

    《Oracle Database 11g:初学者指南》是一本针对Oracle 11g数据库系统入门者的详尽教程。Oracle 11g是Oracle公司推出的数据库管理系统版本,它提供了丰富的功能和增强的性能,广泛应用于企业级数据管理和分析。作为...

    oracle实验9-10-索引与视图-序列和同义词的创建.doc

    Oracle 实验报告 - 索引、视图、序列和同义词的创建 本实验报告旨在介绍 Oracle 中的索引、视图、序列和同义词的概念和应用。通过实验,掌握创建索引、视图、序列和同义词的命令,并理解它们在数据库中的作用。 一...

    Oracle Database 11g:初学者指南 (中文版)

    本书“Oracle Database 11g:初学者指南”是一本专门针对初学者编写的教程,旨在帮助读者快速入门Oracle数据库的世界。书中涵盖了Oracle数据库的基本概念、安装配置、数据存储、SQL语言、表和索引的创建与管理、...

Global site tag (gtag.js) - Google Analytics