Unicode和性能

dfb*_*dfb 3 sql-server unicode tomcat spring-mvc

我正在迁移大型Web服务以使其与国际字符兼容。它是Tomcat / Spring MVC / SQL Server堆栈。迁移本身是相对简单的,我们在Tomcat中进行了一些设置更改,以强制在响应中默认使用UTF-8,更改了一些Java代码以使用编码,然后将一些VARCHAR列迁移到NVARCHAR,然后进行了一定剂量的迁移单元/功能测试。

我们团队中的另一个人现在希望进行负载测试,以确保所有更改均不会对系统性能产生不利影响。上述过渡的各个组成部分并不能真正暗示任何性能变化,而且坦率地说,基于我的有限知识,我认为这并不是完全必要的。无论如何,我都打算这样做,但是,我的问题是吗?在这种迁移中可能会遇到性能陷阱吗?是否有特定于其他字符编码的特定内容可能会改变系统的性能?

我唯一想到的就是繁重的字符串比较和排序等操作。有什么想法吗?

Rem*_*anu 5

您应该考虑升级到SQL Server 2008 R2,因为它提供了Unicode压缩

SQL Server 2008 R2中的Unicode压缩使用Unicode标准压缩方案(SCSU)算法的实现来压缩存储在行或页面压缩对象中的Unicode值。对于这些压缩对象,对nchar(n)和nvarchar(n)列自动进行Unicode压缩。SQL Server数据库引擎将Unicode数据存储为2个字节,而与语言环境无关。这称为UCS-2编码。对于某些语言环境,在SQL Server 2008 R2中实施SCSU压缩可以节省多达50%的存储空间。

您将遇到的最大难题是数据类型优先规则。因为NVARCHAR的优先级高于VARCHAR,所以将两者混合的任何表达式都将强制为NVARCHAR。实际上,这意味着之前在两个VARCHAR列之间的列A和列B之间的连接条件现在导致索引查找,现在它将在CAST(A as NVARCHAR)和B 之间(考虑我们仅将B更改为NVARCHAR),这不再是可保存的(将导致表扫描)。此问题可能出现在联接,WHERE子句,参数类型和许多其他地方。需要仔细考虑,导致的性能下降是巨大的(完全扫描与搜索)。