`
rootjo
  • 浏览: 17240 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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 性能调整 sql性能优化大全

    对于初学者,`Oracle初学者入门指南-索引是干什么用的 索引 干什么 指南 入门 学者 数据 记录 upper _中国网管联盟-网管网-bitsCN_com.htm`可能详细介绍了索引的基本概念,包括其在加速查询、减少I/O操作中的作用。...

    oracle向达梦数据库迁移

    Oracle12C 向达梦8(DM8)迁移是一个涉及多个步骤的技术过程,主要目的是将现有的Oracle数据库系统顺利地转换到达梦数据库平台,以利用其特定的优势或满足特定的业务需求。以下是对这个迁移过程的详细说明: 一、...

    oracle数据库管理工具(支持您从开发到系统管理的全过程)

    Oracle数据库管理系统是全球广泛使用的大型关系型数据库系统之一,它为开发者和系统管理员提供了强大的功能,以满足从数据存储到复杂业务逻辑处理的各种需求。"Oracle数据库管理工具"旨在为用户提供一套全面的解决...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    14.1 什么是事务 386 14.2 事务的ACID属性 387 14.3 事务隔离级别 388 14.4 多版本读一致性 390 14.5 事务控制语句 391 14.5.1 Commit(提交) 391 14.5.2 Savepoint(保存点) 391 14.5.3 Rollback(回滚) 391 ...

    Oracle11gOCP-051干货笔记

    Oracle 11g OCP-051 是针对Oracle数据库管理员认证的一项考试,涵盖了SQL语言基础、用户及数据库对象以及SQL语言的扩展等多个方面。以下是对这些知识点的详细阐述: **第一部分:SQL语言基础** 1. **Oracle命令...

    绝对干货-Oracle 数据泵命令全解析.docx

    本文将深入解析Oracle数据泵的使用,特别是expdp命令的详细操作和参数说明。 首先,数据泵操作需要在数据库服务器端进行,无法在客户端执行。在使用数据泵前,必须设置Directory对象,这是Oracle用来管理文件路径的...

    优化Oracle库表设计的若干方法

    当数据和索引同时写入时,由于磁盘I/O资源的限制,可能会出现争用,从而降低读写速度。此外,将表数据和索引数据分离,可以方便地进行备份和恢复,便于数据库的管理和维护。 1.2 如何创建独立的表空间 创建独立的表...

    stemcells-cpi-index:轻型干细胞的干细胞索引(AWS,GCP,Oracle等)

    这个索引可能使用了各种度量标准和基准测试,以确保公平和客观的比较。 总的来说,干细胞CPI指数是一个重要的工具,它帮助科研人员在日益复杂的云环境中作出明智的选择,确保他们的干细胞研究工作得到最佳的计算和...

    ORACLE性能調整總結

    #### 七、如何干預執行計劃—使用Hints提示 為了指導優化器選擇特定的執行計劃,可以使用SQL Hint。例如: - **指定索引使用**:`/*+ INDEX(t idx_name) */ SELECT * FROM t;` - **強制全表掃描**:`/*+ FULL(t) *...

    收获,不止SQL优化 PDF 带书签 第三部分

    然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要“愁”就一个字,心碎无数次了。 缘何有性能问题?原因也一字概括:“量”。当系统数据量、并发访问量上去后,不良SQL就会拖跨整个系统,...

    GIS数据库答案.doc

    地理信息系统是一个复杂的综合体,要用数据来描述各种地理要素,尤其是要素的空间位置和空间关系等,其数据量往往很大。 2. 不仅有地理要素的属性数据,还有大量的空间数据,即描述地理要素空间分布位置的数据,并且...

    中国平安面试资料,相当的全面

    2. **Oracle培训(2)**:Oracle是一种广泛使用的大型关系型数据库管理系统,对Oracle的深入理解和操作能力是许多IT职位的基本要求。培训可能涵盖了SQL查询、数据库设计、存储过程、触发器、备份恢复、性能优化等...

    收获,不止SQL优化

    , 然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要“愁”就一个字,心碎无数次了。, 缘何有性能问题?原因也一字概括:“量”。当系统数据量、并发访问量上去后,不良SQL就会拖跨整个系统...

    边干边学数据库应用.zip

    在“边干边学数据库应用.zip”这个压缩包文件中,包含的是关于使用LabVIEW进行数据库应用的学习资源,特别适用于2011版本的用户。LabVIEW,全称Laboratory Virtual Instrument Engineering Workbench(实验室虚拟...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    你都用它干什么?.mp4 │ Java面试题50.Spring MVC的执行流程.mp4 │ Java面试题51.SpringMVC和Struts2的不同.mp4 │ Java面试题52.简单介绍一下Spring或者Spring的两大核心.mp4 │ Java面试题53.AOP是什么?都用它...

    数据库作业汇总--代码涉及很基础大多是直接操作界面= =

    4. 数据库操作:如何使用GUI工具创建、编辑和删除数据库对象,如表、视图、索引等。 5. 查询优化:理解索引的作用,以及如何编写高效的SQL查询。 6. 数据库安全:用户权限管理,如何设置访问控制以保护数据安全。 7....

    一个介绍BIEE基本框架的PPT

    4. **性能优化**:BIEE支持缓存、索引等技术,以提高查询性能。 5. **安全性**:通过角色和权限管理确保只有授权用户能访问特定信息。 **四、BIEE的优势** 1. **灵活性**:支持多种数据源,可轻松适应企业不断...

    JSP在线考试系统,后台数据库为MySQL

    管理员可以使用系统后台添加、修改和删除试题,包括题干、选项、正确答案等信息。这些数据会被存储在MySQL的相应表中,如`questions`表,包含字段如`id`(试题ID)、`question`(问题内容)、`options`(选项列表)...

    什么是数据库设计数据库设计的步骤.docx

    这一过程不仅包括技术层面,也涵盖了管理层面,因为数据库建设是硬件、软件和干件(即人为因素)的结合。数据库设计的特点体现在其复杂性和反复迭代中,它需要对数据的结构和行为进行分离设计,同时考虑技术与管理的...

    数据库最新详细教程价值万元资料包独家分享

    3. **索引和查询优化**:如何通过建立索引来提高查询速度,以及查询优化策略,例如避免全表扫描,使用合适的数据类型等。 4. **数据库安全性**:包括用户权限管理、数据加密、备份恢复策略等,确保数据的安全性。 ...

Global site tag (gtag.js) - Google Analytics