SqlServer静态表,静态sql和动态sql
一个mysql问题
如果mysql字符集为gbk的话,每个字符需要占用2个字节,如果字符集为utf-8则最多会是前者的两倍,再加上20%的消费空间。
创新互联公司主营沧州网站建设的网络公司,主营网站建设方案,app软件开发,沧州h5微信小程序搭建,沧州网站营销推广欢迎沧州等地区企业咨询
每个字段的长度根据字符集乘上字节数然后再加20%的耗费空间就是。
回答补充:
详细说的话还要分三种情况:
mysql在创建表的时候定义表的性质,共有三种:静态表,动态表,压缩表。默认是静态表,如果存在varchar、blob、text字段,表类型就是动态了。
1.静态表:
字段有固定长度,例如:char(20)。如果使用gbk字符集存储中文username,将占用40byte,如果username的实际内容没有达到40byte,将会填充空格,以达到40byte。速度很快,因为mysql知道username总是从第41个字节开始,容易缓存,出现问题后也容易恢复(mysql知道记录的确切位置),需要更多的硬盘空间(如果有三个上面的字段,一条记录就会占120字节,即使实际只用了其中一部分)
2.动态表:
字段不定长(变长),这种表格式比较节省空间,但是复杂度更高,每条记录都有一个header,作用就是表明该记录有多长,所有的字符串列都是动态的(除非小于4个字节,这种情况下,节省的空间可以忽略不计,增加的复杂度会反而会导致性能丢失),通常占用比静态表少的多地空间,但是必须经常维护(避免碎片),例如:更新了用户名somebody为somebodyt,t不能立刻就出现在y的后面,因为空间被其他记录占用,对于出现碎片的列,每个新连接会损失6个字节。而且出现问题后不容易重建(前面我说的静态表正好相反),如果碎片严重,有可能出现库爆炸(^_^).
不包括连接的动态记录的空间消耗可以用下面的公式计算:
3+(列数+7)/8+(字符列数)+数字列的打包尺寸+字符串长度+(空列的数量+7)/8
每条记录的header可以表明那个字符串列是空的,那个数字列包含0(非空),在那种情况下不向磁盘存储,非空字符串包含一个长度字节加上字符串内容。
压缩表:
只读,使用很少的空间,用myisampack工具创建,表要少得多,每条记录分开压缩,所以不能同时访问,可以压缩静态表和动态表。
创建方法:myisampack [options] filename
你大体上可以看出来,具体的计算空间不容易,只要根据不同的表特点选择数据库就可以了。
SQLSERVER 两表生成动态交叉表?
--静态SQL
select [商品款号],[品名],[采购价],[零售单价],[颜色],[码系],
case [序号] when 0 then [数量] else null end "0",
case [序号] when 1 then [数量] else null end "1",
case [序号] when 2 then [数量] else null end "2",
case [序号] when 3 then [数量] else null end "3",
case [序号] when 4 then [数量] else null end "4"
from [出入库明细]
--动态SQL
declare @sql varchar(8000)
set @sql = 'select [商品款号],[品名],[采购价],[零售单价],[颜色],[码系]'
select @sql = @sql + ' , case [序号] when ' + seq + ' then [数量] else 0 end "' + seq + '"'
from (select distinct cast([序号] as varchar) seq from [出入库明细]) as a
set @sql = @sql + ' from [出入库明细]'
print @sql
exec(@sql)
sql-server的视图索引是静态的还是动态的?请说明原因
sqlserver 索引视图 对 版本有 要求,体验版没这功能,开发,企业版倒是可以用。
如果是体验版,建议你用表结构吧!
CREATE VIEW V_Remark WITH SCHEMABINDING AS SELECT [ID],COUNT_BIG(*) as Qum FROM [dbo].[StrText] GROUP BY IDGOCREATE UNIQUE CLUSTERED INDEX V_Remark_UCI_ID ON V_Remark ([ID])
名称栏目:SqlServer静态表,静态sql和动态sql
本文链接:http://azwzsj.com/article/phhedc.html