我已经非常习惯于在我们公司的内部论坛软件(目前在Server 2017中)中使用COMPRESS()和DECOMPRESS(),但为了使数据库尽可能高效,在将来迁移到Server 2019时,在当前的排序规则中添加_UTF-8是否有优势?
发布于 2018-11-01 10:27:23
下面列出了从 这里:中获取的推荐用法列表
UTF-8编码,作为一种可变长度的编码,在某些情况下可能是一个巨大的好处,但在其他情况下也会使情况变得更糟。不幸的是,“_UTF8”编码没有多大用处,因为所有版本的Server都可以使用数据压缩和集群列存储索引。唯一真正受益于UTF-8编码的情况是,下列所有条件都为真:
存储HTML页面是符合这种描述的场景的一个很好的例子。当然,UTF-8正是由于它使用了最常见字符的最小空间而仍然允许完整范围的Unicode字符的首选编码。
发布于 2018-11-01 13:53:26
努力使数据库尽可能高效
至少有两种不同类型的效率在这里发挥作用:
在某些情况下(如Outman的答案所述,它是我博客文章中“推荐使用/指导”部分的副本/粘贴,链接在该答案的顶部),您可以节省空间,但这完全取决于字符的类型和每行数量。
但是,至少在当前的实现中,您更有可能降低速度。这可能是由于他们如何在内部处理UTF-8数据。我知道,当将UTF-8数据与非UTF-8 VARCHAR数据进行比较时,这两个值都转换为UTF-16 LE (即NVARCHAR)。如果将UTF-8数据转换为NVARCHAR所需的其他操作(甚至可能是大多数),我不会感到惊讶,因为这就是Windows / Server / .NET一直处理Unicode的方式。
因此,假设您有一个可能受益于使用UTF-8的场景,您需要选择哪个效率更重要。
现在,UTF-8是否会有利于环境本身自然是UTF-8 (例如Linux)的情景还有待观察。通常,数据库驱动程序(ODBC、等)处理客户端和服务器之间的转换。如果这样做会导致驱动软件跳过执行这些编码转换所需的附加步骤(和CPU周期),那么这里可能会提高性能/效率。到目前为止,这只是一个理论,因为我还没有测试它。
请记住以下几点:
VARCHAR的现有应用程序可以开始支持Unicode,而无需进行太多的重新编码(即向字符串文本添加N前缀)或将数据类型从VARCHAR更新到NVARCHAR。它不是设计成一种压缩形式。如果您的数据在UTF-8中减少了占用空间,那么就很好了。但是,当处理非标准ASCII的数据时,要么没有任何节省,更糟的是,您可能会通过转到UTF-8来增加数据大小(考虑到65k BMP字符中的63k字符在UTF-8中是3个字节,这比UTF-16中所需的2个字节多了一个字节)。而且,如果UTF-8提供了性能增益,或者至少您没有看到性能下降,那么很好。不过,别指望了。事实上,如果你碰巧看到业绩下降,不要感到惊讶。VARCHAR列而导致的数据丢失。这是由排序规则优先级导致的,它有效地将排序规则从UTF-16降到列正在使用的任何代码页。有关更多细节和示例,请参见我的帖子:Server 2019中的本机UTF-8支持:救世主还是假先知?中的“要记住的事情:操作”部分。
https://dba.stackexchange.com/questions/221531
复制相似问题