之前已经为大家介绍了两点Oracle数据库段管理有技巧,即Oracle数据库段管理有技巧(一),接下来就为大家介绍更多的技巧。
技巧三:减少临时段的使用
临时段主要用来存储排序等操作所产生的临时数据。如现在某张数据表中,有A、C、B、F、E、D等记录。此时,若用Order By子句对其进行排序,数据库系统就会返回A、B、C、D、E、F数据。这些被重新排序过的数据,就叫做临时数据。通常情况下,这些临时数据会存放在两个地方,分别为PGA工作区与临时段中。默认情况下,这些临时数据会先存储在PAG工作区。如果因为临时数据比较大,PGA工作区已经满了的情况下,数据库会把剩下的临时数据存放到临时段中。
从理论上讲,无论是把数据存放在PGA工作区还是存储在临时段中,对于用户的最终结果没有影响。但是,如果从数据库性能方面考虑,则两者就有比较大的差异。
PGA工作区,又叫做程序全局区域,它是包含服务器进程的数据和控制信息的非共享内存区域。通常情况下,只要数据库服务器进程启动,则Oracle就会在内存中创建程序全局区域。在10G以后的版本中,Oracle数据库能够自动根据内存的使用情况来管理程序全局区域,而不用数据库管理员去手工的干预,从而使得PGA工作区的使用率更高。所以,一般来说,把临时数据存放在PGA工作区,其效率更高。
在实际工作中,数据库管理员应该尽量避免产生大量的临时数据,或者说,尽量不让临时数据超过PGA工作区所能够承受的***容量。从而数据库不得不把临时数据存放到临时段中。
在实际工作中,很多Select语句都会产生临时数据。如在Select语句中,若加入Order By、Group By等子句,都会导致数据库对数据文件中的记录进行重新组织,从而产生大量的临时数据。为此,在应用程序设计中,就***能够加入一些默认的查询限制条件,从而避免产生大量的临时数据。如在销售表查询的时候,如果用户没有输入具体的查询条件,则应用程序默认只查询近30天的销售记录,并按交易的日期或者产品进行排序。如果这些记录不能够满足用户的需求,再进行全部记录的查询。如此设计的话,就可以在一定程度上减少临时数据,减少临时段使用的频率。因为根据相关统计,用户在查询的时候,往往不会主动加入查询条件。而他们所需要的数据,往往都是最近一些的交易记录。为此,在应用程序设计过程中,加入一些默认的查询条件是非常有必要的。
技巧四:LOB段***独立与普通表
在Oracle数据库中,除了可以存放一些字符、数字等基本数据类型外,还可以存储附件、图像、音频、视频文件等等。用来存放这些数据的段,就叫做LOB段。当数据库在创建这些特殊类型的列时,Oracle数据库系统就会自动为他们建立对应的LOB段。通常情况下,如果这些特殊数据类型的长度比4000字节要少,则这一列与其他普通列的数据会一起存放在表段中,如果数据长度超过了4000字节,则数据库就会被存放在LOB段中。
如果从数据库性能方面考虑,***能够把这些特殊的数据类型跟其他数据类型分别存放。如现在有一张产品信息表,需要包含产品ID、产品名称、产品规格、产品图像等内容。那么,在数据库设计的时候,***能够建立两张表,一张用来存储产品ID、产品名称、产品规格等信息;另一张表中存储产品ID、产品图像等信息。如此设计,主要是出于两个方面的考虑。
一是在实际工作中,并不是每次查看产品信息时,都需要产品图像的内容。如在生成订单时,没有必要再每次下单时都显示产品图片。因为对于一些老产品来说,这个产品图像早就印在用户脑海中。即使系统显示图片信息,用户也不会去关注。
二是这会影响数据库的查询性能。众所周知,数据库查询效率跟数据容量有很大的关系。数据容量越大,其查询的效率越低。而LOB段中存储的数据往往都是一些大容量的数据。所以在用户不需要的情况下,显示图像等信息,就会大大降低数据库的性能。再说,在一些应用程序中,由于网速或者刷新率等原因,其显示图像信息本身就要比显示文字信息来的慢。这就更加延长了用户的等待时间。
所以,LOB段的数据类型***能够跟表中的其他字段分开来管理。在数据库设计的时候,就可以把他们存放在独立的表中,然后通过关键字进行关联。
掌握了这些技巧就会给我们以后的工作带来很大的方便,而且快速,提高了工作效率,但是这些技巧要灵活掌握,不要生搬硬套。
【编辑推荐】