小编Erw*_*ers的帖子

通过查找表更新包含特定前缀的字段

我有一个临时表#NAMEOLD_NAMENEW,其中包含一列NAMEOLD和一列NAMENEW,其中每一行都包含要更新的值的旧值和新值。该表由大约 2.000 行组成。我在 上创建了一个聚集索引NAMEOLD

临时表将用于更新数据库中的某些字段。我知道哪些表中的哪些列需要更新(大约 25 列超过 20 个表)。

现在,需要更新的字段包含字符串DOMAIN\作为前缀,然后是NAMEOLD临时表的值。

我想要做的是:使用临时表将字符串的完整值DOMAIN\加上之后的字符串替换为表中的适当值#NAMEOLD_NAMENEW

例子:

示例数据#NAMEOLD_NAMENEW

NAME_OLD NAMENEW
user1 user5
user2 user6

示例数据TABLE1

ColumnWithName1
域\用户 1
域\用户 2

现在运行查询应该更新TABLE1为:

ColumnWithName1
USER5
user6

我认为多次扫描整个表不会表现得足够好(SELECT在某些表上已经需要几分钟)。

我想到的是输入所有需要更新的列,然后使用带有捕获组的正则表达式更新它们。像这样(非工作代码):

UPDATE [dbo].[Table1]
SET [ColumnWithName1] = (SELECT [NAMENEW] from new_old WHERE [NAMEOLD] = [/1]) -- first CAPTUREGROUP??
FROM #NAMEOLD_NAMENEW new_old
WHERE [ColumnWithName1] like '%DOMAIN\(.*)'
Run Code Online (Sandbox Code Playgroud)

此处捕获组不起作用,因为它似乎不存在于 T-SQL …

performance sql-server t-sql regex query-performance

3
推荐指数
1
解决办法
2605
查看次数

使用复杂 where 子句对 10M 行进行查询的性能

我们有一个查询会在运行时破坏我们的生产服务器。

它是报告功能的一部分,不好的部分如下所示:

SELECT DISTINCT 
    mt.ID           AS ID
FROM 
    [dbo].[MyTable]    mt
WITH (NOLOCK)
WHERE           
    (@aVariable           IS NULL 
      OR (CONVERT(VARCHAR(22), mt.Date1, 112) >= CONVERT(VARCHAR(22), @date1, 112))
    AND (@status            IS NULL 
    OR @status <> 2 
    OR  (   @status = 2 
        AND (  SELECT COUNT(*) 
               FROM 
               MyTable mt2
               WITH (NOLOCK)
               WHERE 
                  mt2.CaseID = mt.CaseID 
                  AND mt2.Date1 > mt.Date1
             ) = 0
        )
    )
    AND (@aSecondVariable IS NULL 
           OR (CONVERT(VARCHAR(22), mt.Date1, 112) <= CONVERT(VARCHAR(22), @date1, 112)))
    AND (@aThirdVariable  IS NULL 
           OR (CONVERT(VARCHAR(22), mt.Date2, 112) >= …
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2008 sql-server query-performance

2
推荐指数
1
解决办法
2993
查看次数

将日志存储在单独的或现有的数据库中?

在 .NET WebForms 项目中,我们希望在数据库中记录一年中的某些操作。估计日志的最大大小为 1GB(每天 20.000 条记录,包含 10 个字段),每天最多可能被查询 2 次。

我们正在讨论是否建议将日志记录表放在一个新数据库中(甚至可能在一个单独的服务器上),或者在我们现有的数据库中使用一个新表。

使用我们现有的数据库的好处是我们不需要在代码中建立新的连接,也不需要管理一个新的数据库。缺点可能是数据库无法处理它。

你有什么见解?你有什么建议吗?

sql-server storage

1
推荐指数
1
解决办法
719
查看次数