因此,我有一个由我们的票务系统Cherwell版本9.3.2发送和接收的电子邮件的数据库。它使用Microsoft SQL作为后端,我们的版本为2012。我有兴趣对旧的或无关的电子邮件进行清理。例如,超过3年的电子邮件,或者发送给技术人员的通知称他们有新任务,或者我们发出的通知对于保留数据库中存储的完整电子邮件确实没有任何价值,因为Cherwell还会为大多数电子邮件创建明文行这些电子邮件。与邮件有关的表TrebuchetMail的大小是193,883.156 MB。 我想知道是否可以通过减少此表来提高整体性能,因为Cherwell中几乎每种记录类型都可以访问此表。当然,只有那些与特定记录相关的行。
好的,我的问题是:主题是存储电子邮件主题的列。我确定了几种要删除的主题,例如:
--165765
select count(*)
FROM [cherwell].[dbo].[TrebuchetMail]
where subject like 'You have an unacknowledged Task%';
主题的You have an unacknowledged Task
部分之后是一个数字,即单个Task对象的ID号。因此,执行选择不同的操作会将所有165765行都视为不同的,因为它们是不同的。您能否使用通配符选择“ select”来将相似但不完全相同的分组在一起?我还有别的功能可以使用吗?我意识到它实际上是与众不同的,但是肯定可以解决此问题。 “选择不同的主题”查询将把主题如'You have an unacknowledged Task%'
和主题如'Ticket #%Created'
的行组合在一起。我是否总是需要一些条件,所以也许这是没有意义的,因为无论如何我将不得不查看全部结果以提出选择不同查询的条件。
我的目标是确定可以作为归档/删除目标的其他主题。
I found a 2013 thread that was a similar question, but it had to do with dates. The asker wanted to group together rows from a log that grouped together the days, disregarding the time aspect of the log.我不太了解如何将其转化为适合我的情况的方法。如果能对我有用,我将不胜感激。
答案 0 :(得分:0)
我知道这可能不是您要寻找的答案,因为它是高科技产品,并非基于公式。但是由于这很可能是一次性操作,所以为什么不将数据库导出为表并按主题字段对其进行排序。所有不相关的记录都将分组在一起,并且可以轻松删除。
完成此操作后,只需将表重新导入数据库即可。当然,这仅适用于平面数据库,而不适用于高度链接的数据库。
同时,如果出现问题,您将进行备份。
答案 1 :(得分:0)
您可能想要做的(请记住,我不是 SQL 专家)是创建一个新的子查询/表达式,作为查询中的新列,作为主题的截断部分。
类似的东西,
Select RecID, ( Subject.Replace('1','').Replace('2','').Replace('3','') As CustomColumn )
From TrebuchetMail
依此类推,删除主题行中出现的任何数字 0-9。
然后,我相信您可以根据这一点进行区分。
我确信还有一种更优雅的方式来使用 Regex 表达式来实现这一点,我只是太新手了
不确定它在实践中的效果。
注意.... 我可能在这些替换命令上有语法错误。我想我正在考虑它是如何在 VB/C# 中完成的,我认为在 SQL 中它更像是 Replace(expression, 'text to replace with', 'text to replace with') 但你明白了