更新查询需要2秒钟来更新表

时间:2016-05-30 05:34:38

标签: sql-server

我在SQL DB Server中有一个表。 (表名:材料,6列)。它包含260万条记录。我需要根据两个列值更新此表。对于更新,系统需要2秒钟。

请帮我优化以下查询。

activate: function( event, ui ) {
    $(ui.newHeader).get(0).scrollIntoView();
}

4 个答案:

答案 0 :(得分:2)

在我们可以确切地告诉您什么(如果有的话)可能有帮助之前,您确实需要提供查询计划。

话虽如此,我要检查的第一件事是该计划是否显示了大量时间进行表扫描。如果是这样,通过在.cakebg { background-color: #F8BBD0; background-size: 25%; position: relative; } .cakebg::after { content: ""; background: url(img/cake.png); opacity: 0.5; top: 0; left: 0; bottom: 0; right: 0; position: absolute; z-index: -1; } SM上添加索引,可以大大提高性能,这将允许分析器使用索引来执行索引搜索而不是表扫描,并且可以大大提高性能。

答案 1 :(得分:1)

由于您获得大数据,因此很少有调整可以提高查询性能

(1)如果要更新的列已编入索引,请删除索引

(2)以较小批量执行更新

DECLARE @i INT=1 
WHILE( @i <= 10 ) 
  BEGIN
      UPDATE TOP(20000) Material
    SET Value = @Value,
        Format = @Format,
        SValue = @SValue,
        CGroup = @CGroup
WHERE 
    SM = @SM
    AND Characteristic = @Characteristic

    SET @i=@i + 1 
  END

(3)禁用删除触发器(如果有)

希望这有帮助!

答案 2 :(得分:1)

尝试为SM&amp;放置综合指数特点。通过这样做,sql server将能够更轻松地选择记录。操作方面,更新是插入和放大的组合。删除。如果您的表中包含更多列,即使您没有尝试更新所有列,也可能会降低更新速度。

我喜欢的步骤

  1. 尝试将复合索引与SM&amp;特色
  2. 尝试重新创建一个包含所需列和表格的表格。在任何需要的地方使用连接。

答案 3 :(得分:1)

2.6 mil行并不是那么多。 2秒的更新可能太多了。

话虽如此,更新时间可能取决于两件事。

首先,使用单个更新命令更新了多少行,即它只是一行还是一些更大的集合?你可以做很多事情,只是说应该考虑它。

另一件事是索引 - 你可能有太多当时或不够。

如果表中缺少索引(SM,特征) - 或(特性,SM),取决于选择性 - 那么它可能每次都是全表扫描。如果更新仅触及几行,则浪费时间。所以,这是第一件要检查的事情。

如果受影响列上的索引太多,这也可能会降低更新速度,因为每次更改数据都必须维护这些索引。您可以通过查询sys.dm_db_index_usage_stats DMV来检查索引的有用性(在互联网上有很多解释,所以我不会在这里进入它)并删除未使用的。只要小心这一点并彻底测试。

要检查的另一件事是受影响的列是否是某些外键约束的一部分。在这种情况下,引擎必须每次都检查约束的有效性(iow,检查引用表中是否存在新值,或检查引用表中是否有数据,具体取决于FK的哪一侧)专栏是)。如果此检查没有支持索引,则会(再次)对所涉及的其他表进行扫描。

但要真正确定,检查执行计划和IO统计数据(SET STATISTICS IO ON),它会告诉你究竟发生了什么。