| 在oracle8i中如何快速访问数据库 |
| |
发布者: 发布时间:2007-01-27 |
|
|
oracle 是以高级结构化查询语言(sql)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客户/服务器(client/server)体系结构的数据库之一,我们当然希望能够更加快速的访问数据库.我们在看书的时候为了更加迅速的找到我们关心的内容,首先我们会去看目录, 正如书籍目录有助于读者更快地找到信息一样,oracle表中的索引也有助于更快地检索到数据。如果应用程序运行较慢,设计巧妙的索引将会加快其速度。
表( ta b l e )是存放用户数据的数据库对象。每个表的信息放在数据字典中,o r a c l e使用数据字典来保证将正确类型的数据(如数字或字符)放到o r a c l e表中。形象的比喻是填表比作一个电子表格,电子表格中的单元( c e l l )相当于表中的表列。和电子表格中的单元一样,表中的表列也有相应的数据类型。如果定义电子表格中某个单元为数字数据类型,则在此单元中不能存放字符。表中的表列也是一样,类型为数字的表列不接收字符. 索引(index) 是表的小型化拷贝,表的索引项允许o r a c l e快速访问表中的数据。提示合理构造表索引有助于提高数据库查询速度。
根据我们的经验:如果把索引视为一个小表,将有助于理解索引的工作方式。设想有下
面的表(其中省略号表示还有表列从d到z未写出,该表应共有26个表列):
sql*plus: release 8.1.5.0.0 - production on mon feb 29 22;06 2001 (c) copyright 1999 oracle corporation. all rights reserved connected to: oracle8i enterprise edition release 8.1.5.0.0 - production with the partitioning and java options pl/sql release 8.1.5.0.0 - production sql> create table sample_3 2 (a varchar2(30) , 3 b varchar2(30), 4 c varchar2(30), …… table created |
每当需要读取存在表列c中的数据时, o r a c l e系统必须也把保存在表列a、b以及d到z中的数据取出。计算机资源有限,每次进行这种操作时,对一次取出的信息量都有限制。为理
解上述所说的限制,假设o r a c l e 8 i发出从s a m p l e _ 3取数据的请求,内存限制要求每次最多能取出与四行表数据所占空间等量的信息。如表1所示,定义了一个3,1 2 0个字符的读缓冲区。
表1 无索引返回列c
column length c l 3 0 columns retrieved c r 2 6 rows retrieved r r 4 buffer size cl*cr*cr = 3,120 |
即使只希望了解存放在表列c中的信息,数据库也会被迫取出存放在其他表列中的数据。
有一种解决此问题的方法就是使用索引( i n d e x )。用s q l语句create index colc_ind on
s a m p l e _ 3 ( c o l c );在表列c上建一个索引, o r a c l e根据此命令建立索引对象。用户可以将索引想像为只保存表s a m p l e _ 3的表列c中信息的一个小表。此外,使用索引检索出的信息最终也需s a m p l e _ 3中取出,这两个表就像一对双胞胎,对其中一个表所做的操作也影响另一个表。如果从主表s a m p l e _ 3中删除表列c的一项,则索引表中的相应项也被删除。
假设用户只想查询表s a m p l e _ 3的c表列中的数据, o r a c l e知道索引表中存放的数据可以解决此问题。因此, o r a c l e不直接浏览s a m p l e _ 3,而只查看索引表中的内容。o r a c l e进行同样的物理读操作,一次读操作的内存限制同样也为3 1 2 0个字符。使用刚建立的索引, o r a c l e只要取出表列c中数据即可。这时, o r a c l e一次就可以读取1 0 4个记录( 1 0 4×3 0=3 1 3 0 )到内存缓冲区中,
如.表2所示。
表2 有索引返回列c
buffer size bu 312 0 column length cl 30 columns retrieved cr 1 rows retrieved cl/cr*bu = 104 |
索引只包括表中用来建索引的表列的信息,不包括表中所有表列的信息。同样的一次读操作可以取回更多用户关心的信息。而且仅限于用户所关心的信息,表中别的表列的信息根本不用去管。索引是如此的重要,所以在介绍下一部分内容前,我们还要了解索引的另外一些特点和用途.
根据设计,存储在关系数据库中的数据并无特别的顺序,插入的记录保存在下一个可用
位置中。这样,当用户发布一条s q l语句查看特定日期或日期范围的记录时(例如:s e l e c t
from state where state_cd='' m a '';),o r a c l e系统需要遍历表中所有的行。另一方面,索引带有顺序号。如果用户在表中有一个日期类型的表列,可以在此表列上建一个索引。o r a c l e所建的索引中所有的数据都是排了序的。o r a c l e在索引上查找特定日期的数据并把信息返回给用户显然要快得多.
用户可以建立两种类型的索引:唯一性索引(unique index)和非唯一性索引( n o n u n i q u ei n d e x )。唯一性索引不允许数据重复,非唯一性索引允许。正如前面提及,索引和相应的表是一对双胞胎。如果对表中的表列c建立唯一性索引,则每当准备将一行数据插人实际的表之前,系统总要检查索引以确保表列c中数据的唯一性。s q l语句create index colc_ind on
s a m p l e _ 3 ( c o l c );用于建立非唯一索引,而create unique index colc_ind on sample_3
t a b l e ( c o l c );则用于建立唯一性索引。
o r a c l e允许用户建立并联索引,这种索引针对多个表列。用前面例子来说明这个问题。很多时候,用户在查看表列a时必定也要查看表列b和表列c。这时,就可以对此二表列建立并
联索引。建立并联索引的s q l语句为create index colabc_ind on sample_3 table(cola,c o l b,c o l c );,o r a c l e8i管理此索引的方法与管理单表列索引的方法完全一样
当用户编写查询语句有经验后,将会发现自己越来越愿意在s q l语句中使用索引来处理查询。
利用好索引我们就可以快速访问o r a c l e8i数据库.
|
| (转载文章请保留出处:北天JAVA技术网(www.java114.com)) |
| |
| 更多精彩文章: |
| 在windows2000下优化oracle9i性能(1) |
| 在windows2000下优化oracle9i性能(2) |
| 在windows2000下优化oracle9i性能(3) |
| 在windows2000下优化oracle9i性能(4) |
| 提高oracle数据库的查询统计速度 |
| 为oracle8iforsolaris配置并管理多个数据库 |
| |
| 最近评论: |
|
|
| 你曾悄悄的来过! |
| wow gold,wow gold,wow gold,ffxi gil max(6165) |
|
|
| 冰封的往事! |
| wow power leveling,wow gold,WoW Gold,wow gold
max(9321) |
|
|
| 飞舞的传奇! |
| 传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(7536) |
|
|
| 飞舞的传奇! |
| 传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(7349) |
|
|
| 飞舞的传奇! |
| 传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(7323) |
|
|
| |
| 免责声明:该文章由网友发表,如果对您造成侵权,请联系站长。 |