当前位置:首页 » 数据仓库 » 数据库表扩展性设计
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库表扩展性设计

发布时间: 2023-07-29 10:18:25

⑴ ORACLE数据库表自动扩展

首先说明一下,数据文件在加入的时候就可以直接设定为自动扩展,不用再次alter。

再把语句给你解析一下:

create tablespaceSIRM2
datafile'路径+文件'size1024M --存储地址 初始大小1G
autoextend on next10M maxsize unlimited --每次扩展10M,直到不能再扩展为止EXTENT MANAGEMENT local autoallocate --区管理方式为本地管理,segment space management auto; --段管理方式为自动

然后再回答你的问题:

  1. 并不是只能增加2G,这里的2G是你设定的数据文件的初始大小,并不是最后的大小。因为你的表空间是small datafile组成(区别于bigfile),所以每个数据文件最多只能有4M个block块。也就是说,假设你设定的block块的大小是8K,那么这里的每个数据文件最大就是32G(理论最大值,其实并不能完全达到这么大),你的数据文件初始大小2G,也就是说还有30G的可扩展大小左右(small datafile,以8K的block块大小计算,如果是16K,或者32k,那么也就是说可扩展空间更大一些),扩展到不能再扩展了,那么自然就需要增加数据文件了。个人建议:表空间自动扩展关闭(起码我不喜欢用),直接建立需要大小的数据文件,比如每个数据文件30G,一次加4个,那么表空间大小直接增加120G,足够你用了,就算不够再加,工作量也不是很大(比如每月操作一次,一次加四个,估计5分钟搞定,工作量不大吧)。不然天天看着表空间要满,很难受的。

  2. 你的alter database datafile '全路径' autoextend on;语句本身没有问题,但是你没有设定next大小,所以数据库会根据自己的判断增加数据文件的大小,默认参数是多少我忘记了,这个是有默认值的,不过这个默认值真的不大(好像是初始参数的百分之几,你初始设定2G,假设是5%,那么也就是100M左右,对于你来说几乎感觉不到,而且扩展速度慢),所以几乎感觉不到也是可以理解的。

  3. 如果实在感觉麻烦,那么就直接建立一个bigfile的表空间,那你就基本不用管了,那可是4G个数据块,也就是说按照每个block块8K计算,最终能扩展到32T,足够了。不过如果不是数据量特别大,个人感觉还是不要这么干,有利就有弊,而且一个文件那么大,总是感觉不太好。

⑵ 求SQL表扩展字段属性的思路

大家在使用SQL Server开发的时候一定会遇到这样的需求,那就是通过Table_Name1表的两个字段Column1、Column2来查询在Table_Name2表中符合这两个条件的记录,并返回Table_Name2中的字段Column3,面对这样的需求,你也许会说使用表连接就可以了,对的,没错,我也是这样想的,但是有的时候往往要面对不同的突发情况,那就是并不是一定会Column1与Column2是全匹配的查询,可能中间还需要一些逻辑的处理,比如字符串的截取后再匹配等等。这个时候我们通常会在SQL Server中写一个函数,这个函数接收两个参数:Column1、Column2,函数体里面做一些逻辑处理,在通过处理好的参数去查询Table_Name2表,并返回相应的值。很好,那下面我们来计算下图中数据的查询情况。假设表1的数据有50W,表2的数据有4W,在表2没有索引的条件下,查询的复杂度就有50W*4W了,两个表都需要做全表扫描,表2的全表扫描就会达到50W次。(图1:需求说明)优化1:这一个优化,每个开发人员都知道,那就是对表2的两个查询字段分别建立索引。这样的优化和之前相比,性能将会提高N个等级。优化2:这第二个优化方法是使用SQL Server的复合索引,在表2上创建一个复合索引,这个符合索引包括需要查询的两个字段,其实就是把两个字段的内容生成一个索引,其中索引包含了两个索引的排序。优化3:这第三个优化方法是使用SQL Server2005之后版本才有的索引-包含性索引(Include),就是在优化2的基础上,把需要返回的字段也一起放入到索引中,这样的查询就只需要查询索引就够了,不需要再读取数据页了,减少磁盘的IO消耗。不过这个方法也不是万能,因为有时可能返回的字段会比较多,有时几个字段加起来的长度有可能超出了900个字符(索引大小范围),如果想了解可以进入:SQL Server 索引中include的魅力(具有包含性列的索引)优化4:在不考虑一些分区、分表、分到不同的磁盘等优化方式的情况下,我们是否还能进一步优化我们的查询呢?这就是这篇文章想要告诉你的,因为我们的回答是:有的。那就是通过SQLCLR的UDT,把表2的数据一次性加载到内存,那么在进行表1查询的时候,我们不需要通过B+树来查询数据了,直接到内存中查询,这样之所以快是因为操作内存要比操作磁盘要快得多。这其中会有些局限性和缺点,具体见下面的缺点描述。设计思路1、去数据库中把表2读取出来,并放到private static readonly IDictionary<string, string> resultCollectionDic的静态变量中。在数据库服务启动的时候是会初始化2、SQLCLR函数的,所以在启数据库服务的时候,也一起把表2的数据保存到了内存当中了。3、上面的查询中包括了两个字段Column1、Column2和一个返回字段Column3,那么我们如何把这些数据保存到IDictionary字典当中呢?我的做法就是把Column1、Column2的中间加一个字符“+”,把这个字符串作为Key值,把Column3这个返回值做为Value,这样就解决了多个And的查询的问题。这个会有些局限性,具体可以见下面的缺点描述。在函数FunctionImsi2HLR2中传进的两个字符后,就要进行上面的拼凑方式来拼凑Key值,再到IDictionary中查询。

⑶ 如何设计一个好的,可扩展性的数据库

如何设计一个好的,可扩展性的数据库
数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。

在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。