Questions tagged «varchar»

通常指的是可变长度的字符串数据类型。

2
使用的列大小比必要的大得多
我正在与其他人创建SQL Server数据库。其中一张表很小(6行),数据可能保持不变。极有可能会添加新行。该表如下所示: CREATE TABLE someTable ( id int primary key identity(1,1) not null, name varchar(128) not null unique ); INSERT INTO someTable values ('alice', 'bob something', 'charles can dance', 'dugan was here'); 我正在查看该name列的char长度,并且我认为它的值可能永远不会大于,例如32个字符,甚至可能不大于24个字符。我将此列更改为,例如,varchar(32)? 另外,将默认列大小保持为4、8、32等的倍数是否有任何优势?

4
CHAR与VARCHAR(Postgres)的索引性能
在这个答案(/programming/517579/strings-as-primary-keys-in-sql-database)中,有一条话引起了我的注意: 还请记住,进行索引比较时,CHAR和VARCHAR之间通常会有很大的差异 这是否适用/仍适用于Postgres? 我发现Oracle上的页面声称CHAR或多或少是别名VARCHAR,因此索引性能是相同的,但是在Postgres上没有确定的定义。

5
如何将1毫秒添加到日期时间字符串?
基于选择,我可以返回x行,如下所示: 1 2019-07-23 10:14:04.000 1 2019-07-23 10:14:11.000 2 2019-07-23 10:45:32.000 1 2019-07-23 10:45:33.000 我们所有的毫秒都为0。 有没有一种方法可以将1乘以1毫秒,因此选择如下所示: 1 2019-07-23 10:14:04.001 1 2019-07-23 10:14:11.002 2 2019-07-23 10:45:32.003 1 2019-07-23 10:45:33.004 我正在尝试创建一个游标甚至没有成功的更新。 这是获取我想要的结果的查询: select top 10 ModifiedOn from [SCHEMA].[dbo].[TABLE] where FIELD between '2019-07-23 00:00' and '2019-07-23 23:59' 有81k值。该字段是DATETIME。

2
减少varchar列的大小对数据库文件有什么影响?
我们数据库中有许多表,这些VARCHAR(MAX)表中的列VARCHAR(500)(或比max小得多)足以满足需要。自然,我想清理它们,并将尺寸减小到更合理的水平。我了解的“方法”是:我的问题是更改这些列会对磁盘上​​的页面和现存内容产生什么影响?(那里有很多关于增长一列时会发生什么的信息,但是很难找到收缩一列时会发生什么的信息。) 有些表的行数非常小,因此我不担心更改的成本,但有些表却很大,并且担心它们可能会被重组并导致大量阻塞/停机。实际上,我只想一种估计维护时段的方法。通常,我想更好地了解这种情况下数据库引擎的行为。 提前致谢! 编辑: 我正在查看20个表,尽管其中只有一半的行数大于1,000。最大的行将近一百万行。犯规最严重的是一张有350,000行和4 VARCHAR(MAX)列的表,可以缩小到该VARCHAR(500)水平。

1
varchar(n)的开销是多少?
我想从Postgres文档中询问有关varchar(n)类型的片段的含义: 短字符串(最多126个字节)的存储要求是1个字节加上实际的字符串,其中包括在字符情况下的空格填充。较长的字符串的开销为4个字节,而不是1个字节。 假设我有一个varchar(255)字段。现在,以下语句: 如果此字段包含10个字节的字符串,则开销为1个字节。因此该字符串将使用11个字节。 如果该字段使用140个字节保存字符串,则开销为4个字节。因此该字符串将使用144个字节。 以上这些陈述是正确的吗?这里有人理解文档相同的方式,我不过这里有人指出的开销总是4个字节在这里?

2
SQL Server VARCHAR列宽
在网上搜索时,我发现在指定超宽VARCHAR列(例如VARCHAR(30)可能会这样做时,例如VARCHAR(255))时是否会对性能产生影响的建议相互冲突。 我始终认为,如果整行超过8060字节,则会对性能造成影响。除此之外,我看到了分歧。 要求是真的The default is SET ANSI PADDING ON = potential for lots of trailing spaces吗?只要总行宽小于8060,在VARCHAR列过大设置时是否存在真正的性能问题? 列宽很重要的证据 The same goes for CHAR and VARCHAR data types. Don’t specify more characters in character columns that you need. http://www.sql-server-performance.com/2007/datatypes/ Length is a constraint on the data (like CHECK, FK, NULL etc) Performance …

2
了解varchar(max)8000列以及为什么我可以在其中存储超过8000个字符
通过此 Microsoft文档,+ n定义字符串长度,可以是1到8,000之间的值。max表示最大存储大小为2 ^ 31-1字节(2 GB)。存储大小是输入数据的实际长度+ 2个字节。 请帮助我理解这一点。 varchar的最大字符似乎是8000,这远远少于2GB数据的价值。 我看到varchar(max)特定表的此列中有len(mycolumn)> 100 000的记录。因此,我知道我可以8000在varchar(max)列中获得比字符更多的记录。 问题1:8000角色是如何发挥作用的,我应该从哪里知道呢? 问题2:.net数据读取器对此列的查询是否总是返回包含100000+个字符的完整结果?

1
如果索引中包含VARCHAR(MAX)列,则整个值是否始终存储在索引页中?
我是出于好奇而问这个问题,受到这个问题的启发。 我们知道,VARCHAR(MAX)长于8000字节的值不会存储在行中,而是存储在单独的LOB页中。随后使用该值检索一行需要两个或多个逻辑IO操作(从本质上讲,比理论上需要多一个)。 如链接的问题所示VARCHAR(MAX),我们可以将列INCLUDEd 添加到唯一索引。如果此列的值长度超过8000个字节,这些值是否仍将“内联”存储在索引叶页中,还是将它们移到LOB页中?

1
有关SQL Server中varchar大小调整的当前最佳实践是什么?
从存储和性能的角度来看,我试图了解确定varchar列应为多少的最佳方法。 表现 从我的研究看来只有真正需要时才应使用varchar(max);也就是说,如果该列必须容纳8000个以上的字符,那么一个原因就是缺乏索引(尽管一般而言,我对varchar字段的索引有些怀疑。尽管我对DB原理还很陌生,所以也许这是没有根据的)和压缩(更多有关存储的问题)。实际上,一般而言,当执行varchar(n).... oversizing不好时,人们似乎只建议使用所需的内容,因为查询必须考虑最大可能的大小。但也有人指出,引擎将使用指示大小的一半作为数据的平均实际大小的估计值。这意味着应该从数据中确定平均大小是多少,将其加倍,并将其用作n。但是,对于变异性非常低但非零的数据,这意味着要比最大尺寸大2倍,这似乎很多,但也许不是吗?见识将不胜感激。 存储 在阅读了行内存储与行外存储的工作原理并记住实际存储仅限于实际数据之后,在我看来,实际上,n的选择对存储几乎没有影响(除了确保它足够大以容纳所有东西)。即使使用varchar(max)也不会对存储产生任何影响。相反,如果可能的话,目标可能是将每个数据行的实际大小限制为〜8000字节。那是对事物的准确阅读吗? 上下文 我们的某些客户数据有些波动,因此,我们通常将列的宽度设置为稍稍超出其宽度(例如,将这些列增加15-20%)。我想知道是否还有其他特殊考虑?例如,与我一起工作的某人告诉我使用2 ^ n-1的大小(尽管我发现没有证据表明这是事实....) 我说的是初始表的创建。客户将告诉我们,他们将开始向我们发送一个新表,并发送示例数据(或仅发送第一个生产数据集),我们将对其进行查看并最终创建一个表来保存数据。我们希望使这张表最终能够处理将来的进口以及样品中的进口商品。但是,某些行注定会变长,因此我们填充它们。 问题是多少,是否有技术准则?

2
使用聚簇索引时,是否读取“行外”字段?
我知道VARCHAR(MAX)/NVARCHAR(MAX)使用列时会存储数据out of the row-数据行将具有指向另一个存储“大值”位置的指针。 我有以下问题: 是存储每个字段out of the row还是仅存储一个字段max? 如果您使用clustered index表的读取整个记录,那么是否也读取了行外存储的字段? VARCHAR(MAX)或NVARCHAR(MAX)被视为“大值类型”。大值类型通常存储在“行外”。这意味着...

7
MySQL索引VarChar
我试图索引blogentries数据库以获得更好的性能,但是发现了一个问题。 结构如下: CREATE TABLE IF NOT EXISTS `blogentries` ( `id_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `title_id` varchar(100) COLLATE latin1_german2_ci NOT NULL, `entry_id` varchar(5000) COLLATE latin1_german2_ci NOT NULL, `date_id` int(11) NOT NULL, PRIMARY KEY (`id_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=271; 如下查询将正确使用索引: EXPLAIN SELECT id_id,title_id FROM blogentries ORDER …
10 mysql  varchar 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.