【问题标题】:SQL Server 2012 Strange PerformanceSQL Server 2012 奇怪的性能
【发布时间】:2012-09-23 23:16:17
【问题描述】:

这样的查询是否正常:

update A set TextField = 'U'

在有 2M 条记录的表上执行需要 2 分钟?该表没有PK,没有索引,但我也没有使用where

【问题讨论】:

  • 我几乎从来没有处理过这么大的数据 - 希望它能更快地工作,特别是对于简单的查询,不过感谢您的提醒。
  • 更新和插入通常比查询慢,因为读取通常比写入快。
  • @fvu 请改成回答,我会接受的。

标签: sql-server-2012 sqlperformance


【解决方案1】:

2 分钟内更新了 200 万条记录,大约每秒更新 16000 次,这在 IMO 中相当不错。

大多数 DBMS 不会在将写入操作提交到缓存时返回,而是等到操作系统确认写入操作确实已执行。该功能对于确保数据完整性非常重要,您会同意我的观点,这是数据库服务器的关键品质。相比之下,select 语句通常可以从缓存中提供。

顺便说一句,您可能会发现 Bruce Momjian 的 this presentation 很有趣,它很好地解释了选择数据库服务器时要考虑的问题。它以 PostgreSQL 为中心,但他解释的内容适用于所有品牌的数据库服务器。

编辑:另一个有趣的信息来源是this presentation by Microsoft's Bob Dorr - 其中指出 SQLServer 中 98% 的 IO 是异步的。

根据您的观察,更新已包含值的列与设置为 null 的列相比,this SO article 可能包含有用的信息 - 您用于 TextField 列的数据类型可能会产生重大影响。

【讨论】:

  • 我实际上发现了一些非常有趣的东西——如果我将 TextField 的默认值设置为不可空,然后运行相同的查询——它需要 20% 的初始时间。更新期间似乎需要花费大量时间来获取额外空间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多