当前位置: 首页 > 面试题库 >

在nvarchar和int上连接时,性能差异有多大

郁鸿博
2023-03-14
问题内容

我知道nvarchar上的连接速度较慢,因为索引比nvarchar大,每个字符使用2个字节,而int始终为4个字节。联接性能差异是否显着?有什么强烈的理由要避免加入nvarchar?我找不到有关该主题的任何MSDN文章。


问题答案:

至少8x CPU。这是将nvarchar与varchar进行比较时可测量的增加:与纯正varchar相比,unicode排序和比较规则更加复杂。

因此,假设varchar和int相等(不是),则与int相比,nvarchar会有开销

然后,一个字节接一个字节(“ 1234”对1234),您将比较10个字节对4个字节。这也意味着更宽的键,可以减少每页的索引和数据条目=更大的IO。

最后,如果您的nvarchar超过450个字符,则无法对其进行索引,因为索引键的最大宽度为900个字节。



 类似资料:
  • 问题内容: 我试图坚持保持数据库规范化的做法,但这导致需要运行多个联接查询。如果许多查询使用联接而不是调用可能包含冗余数据的单个表,性能是否会下降? 问题答案: 直到发现瓶颈后,数据库才能正常化。然后,只有在仔细分析后,您才能对它们进行反规范化。 在大多数情况下,拥有一套覆盖面广的索引和最新的统计信息将可以解决大多数性能和阻塞问题,而不会进行任何非规范化。 如果对表进行写入和读取操作,则使用单个表

  • 问题内容: 我正在使用Cython或NumPy对一维数组中的每个元素求和。当对 整数 求和时,Cython快〜20%。当对 浮点 求和时,Cython慢 约2.5倍。以下是使用的两个简单功能。 时机 创建两个数组,每个数组包含一百万个元素: 附加点 NumPy在浮点数方面的表现(相当大的优势)甚至超过了自己的整数和。 的性能差异与和指令缺失相同。为什么? 将整数numpy数组转换为C指针()可将性

  • 经过以下问题后,同步块能比原子更快吗<我编写了一个简单的程序来比较AtomicInteger和synchronized块(其中int递增)的性能差异。每次我运行这个程序,它都会给我一个比率 当我使用 该比率最小。它在100左右变化 比率约为800。 问题1:你能告诉我这是测试AtomicInteger和synchronized increment()方法性能差异的正确方法吗? 问题2:如果我增加T

  • 问题内容: 在我当前的项目中,每次用户发出请求时,我都会打开一个新的数据库连接。例如: 当我搜索其他人的代码时,我发现大多数开发人员都会为数据库连接创建一个全局变量,在全局变量上进行设置,然后在整个项目中使用该变量。 我想知道这些方法之间有什么区别吗?如果我使用全局变量,那么当5个不同的用户进行注册/登录等请求时,会有任何延迟。如果会有延迟,我是否应该创建多个数据库连接并将它们存储在一个切片中以供

  • 问题内容: 并且似乎返回相同的结果。它们之间有什么性能差异,为什么? 问题答案: deque.popleft()比list.pop(0)更快,这是因为deque已被优化以在O(1)中执行popleft(),而list.pop(0)需要O(n)(请参阅deque对象) 。 _collectionsmodule.c中用于deque的注释和代码以及listobject.c中用于list的注释和代码提供了

  • 问题内容: 在为应用程序构建架构时遇到一个问题。 何时使用和。我的意思是应该使用它的确切用例。我也曾在网上冲浪,但我能够得到确切的答案。 任何人都可以提出一些确切的用例。 问题答案: 这是针对Microsoft SQL Server的 : 是 Unicode- 每个字符2个字节,因此最大。10亿个字符;可以处理东亚语,阿拉伯语,希伯来语,西里尔字母等字符。 就是 非Unicode -每个字符1个字