关于索引是什么的最简单的比喻是,索引之于表数据如同目录之于一本书。
通过目录的页码我们可以快速的定位一个内容,同样通过索引记录的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数据库系统的入门内容,包括数据库概念、安装配置、SQL语言、数据管理以及基本的数据库管理操作。 1. **数据库概念**: Oracle数据库是基于结构化查询语言(SQL)的数据存储系统,...
总体来看,《Oracle Database 11g初学者指南》为初学者提供了一条清晰的学习路径,无论是对于想要从事数据库管理和开发的专业人士,还是需要使用Oracle数据库的企业用户,本书都是一个很好的起点。通过对书中内容的...
对于初学者来说,掌握Oracle的基本概念、操作和管理是至关重要的。本指南将聚焦Oracle的第7-8章,深入浅出地讲解Oracle的核心知识点。 在第7章,我们主要会接触到的是Oracle的数据类型和表的创建。Oracle支持多种...
Oracle 8i是Oracle数据库系统的一个早期版本,它在20世纪末期广泛使用,并为许多初学者提供了学习数据库管理的基础。《Oracle 8i 初学者入门》这本书旨在帮助新接触Oracle数据库的人理解其核心概念和操作。下面将...
以下是一份详细的"Oracle初学者指南",旨在帮助初学者系统地学习Oracle。 一、Oracle简介 Oracle数据库是由美国Oracle公司开发的,它提供了数据存储、事务处理、备份恢复、性能优化等全面功能。Oracle支持多种操作...
Oracle 9i初学者指南是一本专为对数据库管理感兴趣的初学者设计的教程,它涵盖了Oracle 9i数据库系统的基础知识、安装配置、管理和维护等多个重要方面。Oracle 9i是Oracle公司推出的一个重要版本,引入了许多创新...
首先,“Oracle 9i初学者指南.zip”这本资料专注于Oracle 9i版本的基础学习。Oracle 9i是Oracle公司的一个里程碑产品,作为当时世界上最先进和功能最强大的数据库之一,它提供了包括Real Application Clusters(RAC...
以下是对"Oracle初学者指南.pdf"中可能涵盖的一些核心知识点的详细介绍: 1. **Oracle简介**:Oracle数据库系统由美国Oracle公司开发,它提供了数据存储、数据安全、事务处理、备份恢复等一系列功能。Oracle支持...
本书介绍由著名的Oracle公司研制、开发的大型数据库软件Oracle8的各项功能、操作要领,阐明了所谓的“网络计算”,并讨论了Oracle公司的... 本书为初学者和其他希望进一步掌握、了解Oracle的人员提供了服务器技术概览
通过深入学习"Oracle 8 初学者指南",你将逐步掌握Oracle的基础知识,并具备解决实际问题的能力。随着经验的积累,你可以在数据库领域走得更远,如数据库设计、性能调优、故障排除等高级话题。Oracle的学习是一段...
"Oracle初学者指南16~18"可能涵盖了数据库设计、SQL查询以及数据库管理等核心主题。 第16章:SQL基础 在这一章,你将学习SQL(结构化查询语言),它是与Oracle数据库交互的基础。内容可能包括: 1. 数据库查询:...
通过深入学习上述知识点,并结合提供的压缩包文件,如"oracle初学者1000问"、"oracle初学者指南"、"oracle9i手册"和"oracle的入门心得",初学者可以逐步建立起对Oracle数据库的全面认识,并逐渐提升实践操作能力。...
"Oracle初学者1000问+Oracle命令速查v"提供了丰富的学习资源,帮助你快速入门并提升技能。下面将详细阐述一些Oracle数据库的基础知识和常用命令。 1. **Oracle数据库基础** - 数据库概念:Oracle数据库是一种存储...
ORACLE DATABASE 初学者指南
本教程旨在为初学者提供一个全面的Oracle 9i学习指南,帮助他们理解数据库的基本概念,掌握数据库管理系统的使用,并逐步成长为熟练的Oracle DBA(数据库管理员)。 首先,我们需要了解Oracle数据库的基础知识。...
《Oracle Database 11g:初学者指南》是一本针对Oracle 11g数据库系统入门者的详尽教程。Oracle 11g是Oracle公司推出的数据库管理系统版本,它提供了丰富的功能和增强的性能,广泛应用于企业级数据管理和分析。作为...
Oracle 实验报告 - 索引、视图、序列和同义词的创建 本实验报告旨在介绍 Oracle 中的索引、视图、序列和同义词的概念和应用。通过实验,掌握创建索引、视图、序列和同义词的命令,并理解它们在数据库中的作用。 一...
本书“Oracle Database 11g:初学者指南”是一本专门针对初学者编写的教程,旨在帮助读者快速入门Oracle数据库的世界。书中涵盖了Oracle数据库的基本概念、安装配置、数据存储、SQL语言、表和索引的创建与管理、...