我目前正在处理一个表,该表有很多带有 varchar(50) 的列。我们现在必须在某些列中插入的数据超过 50 个字符,因此我们必须将这些列的列大小从 50 更改为 128,因为我们有很多列,更改单个列是浪费时间。
所以我向我的团队提议,我们为什么不将所有列更改为 varchar(128)。一些队友认为这会导致选择和加入操作期间的性能下降。
现在我不是数据库专家,但我不认为从 varchar 50 迁移到 varchar 128 会导致任何显着的性能下降。
PS - 我们在这些列中没有任何姓名、姓氏、地址类型的数据。
我们正在将数据从源系统引入我们的数据仓库。
他们正在将某些列从 nvarchar(255) 更改为 nvarchar(max)。查看他们的数据,似乎 95% 的数据在 255 个字符以下,99%(可能 100%)在 4000 个字符以下。我们不得不更改我们的 SSIS 包元数据以使用 NTEXT 来引入这些列(它们正在转换 4 个表中的 8 个列)。
我不熟悉 SSIS 如何处理 nvarchar(max)(在 SQL Server 中)/NTEXT(在 SSIS 中)以及会有什么性能影响(如果有的话)。SSIS 是否以不同的方式处理这些数据类型,并且可能更慢?
我们基本上直接读取并转储到我们的暂存环境中,然后从那里继续。我知道 SQL 端的限制,但不知道 SSIS 阶段的限制。
SQL Server 2012 / SSIS 2012
我有一个包含 500 万行的数据库表。聚集索引是自增标识列。PK 是生成 256 字节的代码VARCHAR,它是 URL 的 SHA256 哈希,这是表上的非聚集索引。
表格如下:
CREATE TABLE [dbo].[store_image](
[imageSHAID] [nvarchar](256) NOT NULL,
[imageGUID] [uniqueidentifier] NOT NULL,
[imageURL] [nvarchar](2000) NOT NULL,
[showCount] [bigint] NOT NULL,
[imageURLIndex] AS (CONVERT([nvarchar](450),[imageURL],(0))),
[autoIncID] [bigint] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_imageSHAID] PRIMARY KEY NONCLUSTERED
(
[imageSHAID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE CLUSTERED INDEX [autoIncPK] ON [dbo].[store_image]
(
[autoIncID] ASC
)WITH …Run Code Online (Sandbox Code Playgroud) 我今天遇到了奇怪的问题.我的一个项目是运行.NET + SQL Server 2005 Express.我使用一个查询进行一些过滤.
SELECT *
FROM [myTable]
where UI = 2011040773395012950010370
GO
SELECT *
FROM [myTable]
where UI = '2011040773395012950010370'
GO
Run Code Online (Sandbox Code Playgroud)
UI列nvarchar(256)和传递给过滤器的UI值始终为25位.
在我的DEV环境中 - 两个查询都返回相同的行而没有错误.但是在我的客户,运行几个月后,第一个版本开始返回类型转换错误.
知道为什么吗?
我不是在寻找解决方案 - 我正在寻找解释为什么在一个环境中它起作用而在另一个环境中却没有,为什么突然之间它开始返回错误而不是结果.我在两者上都使用相同的工具(SQL Server Management Studio Express和2个不同的.NET客户端)
环境或多或少相同(W2k3 + SQL Server 2005 Express)