澳门十大赌场最新排名 > 澳门十大赌场 > 对变长字段长度选择的一点思考,ROUND函数的使用

原标题:对变长字段长度选择的一点思考,ROUND函数的使用

浏览次数:105 时间:2019-07-12

SQL ROUND函数是对数据进行制定精度的取值。

不管是在MSSQL还是MySQL或者Oracle,变长字段的长度衡量都是要经常面对的。
对于一个变长的字段,在满足业务的情况下(其实所谓的满足业务是一个比较模糊的东西),到底是选择varchar(50)还是varchar(200)亦或是varchar(500)?
对于保守型选择,往往是选择一个较大的长度,比如varchar(500)要比varchar(50)更具有兼容性,因为是变长字段的原因,存储空间也一样。
这样的选择并不能说就不好,看站在哪个角度来看问题。
那么,相对于varchar(50),varchar(500)在更具备兼容性的同时,有哪些不好的地方,也是需要思考的,。

简介

图片 1

这里的原则就是:对于可变长度的字段,在满足条件的前提下,尽可能使用较短的变长字段长度。

将查询语句查询的结果集作为数据插入到数据表中。

 

 

 

第一个参数是取值的数据,第二个参数是精度,第三个参数是数据取值模式(四舍五入还是截断),其中第三个参数是可选参数,默认是四舍五入模式。

以下是一个相对极端的例子,以SQL Server为例,
TestVarchar1和TestVarchar2的SortColumn 字段长度分别是varchar(50)和varchar(8000),两个表写入10000条测一样的试数据,
SortColumn 的实际长度是36个字符。

一、通过INSERT SELECT语句形式向表中添加数据

图片 2

Create Table TestVarchar1
(
    Id INT IDENTITY(1,1),
    SortColumn varchar(50)
)

Create Table TestVarchar2
(
    Id INT IDENTITY(1,1),
    SortColumn varchar(8000)
)

DECLARE @SortColumn char(36);
set @SortColumn = CAST(NEWID() as char(36))
insert into TestVarchar1(SortColumn) values (@SortColumn)
insert into TestVarchar2(SortColumn) values (@SortColumn)
GO 10000

例如,创建一张新表AddressList来存储班级学生的通讯录信息,然后这些信息恰好存在学生表中,则可以从学生表中提取相关的数据插入建好的AddressList表中。

 

 

T-SQL语句如下:

 从上面结果可以看出,数据并非只保留两位小数,而是保留两位有效小数。

1,基于存储空间的考虑

insert into AddressList(姓名,地址,邮箱)
select name,address,email 
from Students

图片 3

存储空间上,存储不超过一定长度的变长字段,不同长度的变长字段存储空间是一样的,比如选择使用varchar(50)和varchar(500)是一样的,
也就说,对于不超过50个字符串的数据存储,两者在物理空间占用上并没有区别。

 语法快记:该语句和常规的插入语句语法很相似,为了更好的记住语法,即可理解此插入语句把values替换成了查询语句。

从上面两次可以看出,默认不使用第三个参数是四舍五入模式。

这里会发现,两个表的数据在完全一致的情况下,其存储空间也是完全一样的,的确,并不会因为varchar使用一个较长的长度而多占用存储空间

使用该语句插入数据的注意事项:

图片 4

图片 5

  1.查询语句部分其中列的个数、顺序、数据类型必须与INSERT语句的指定列要保持一致,列名可以不相同。

 

2,基于性能的考虑
选择varchar(50)还是varchar(8000),在性能上确实有显著的差异,考虑到某些查询需要内存(Memory Grant),查询引擎会预估当前查询需要的内存,影响查询内存的因素有以下几个方面
1,查询的类型,有没有聚合运算,有没有排序等等
2,每个操作符涉及到的记录数量
3,数据行的大小(这里是字段类型的长度而不是字段实际长度)
当行记录的数据类型长度较大的时候,执行计划预估的平均大小较大,数据类型定义的长度越大,预估的长度越大,需要分配的内存越大
如果一个查询涉及一些聚合操作并且数据量较大,就可能需要大量的内存来完成这个查询,查询引起会分配多余实际需要的内存。

  2.INSERT语句插入数据的表必须是预先创建好的。

第三个参数如果是0,则四舍五入,如果是非0,则截断

两者对数据行Size的预估是一样的(尽管是完全一样的数据)

 

图片 6

图片 7图片 8

INSERT SELECT语句形式中的查询部分不仅可以是单表,可以支持不同形式的查询语句,只要保证查询结果集的列和要插入数据的列是匹配的即可。

本文由澳门十大赌场最新排名发布于澳门十大赌场,转载请注明出处:对变长字段长度选择的一点思考,ROUND函数的使用

关键词: ag电子游戏大奖

上一篇:多表联合Update更新数据,数据类型

下一篇:没有了