在Oracle8i中如何快速访问数据库 |
|||
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个表列):
每当需要读取存在表列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个字符的读缓冲区。
即使只希望了解存放在表列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所示。 索引只包括表中用来建索引的表列的信息,不包括表中所有表列的信息。同样的一次读操作可以取回更多用户关心的信息。而且仅限于用户所关心的信息,表中别的表列的信息根本不用去管。索引是如此的重要,所以在介绍下一部分内容前,我们还要了解索引的另外一些特点和用途. 根据设计,存储在关系数据库中的数据并无特别的顺序,插入的记录保存在下一个可用 位置中。这样,当用户发布一条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数据库. |