所以在我们公司,我们有大量的文章。我们有一个自定义的搜索功能可以在这些文章中进行搜索,这里有一段代码可以生成搜索查询中需要优化的部分。
dtModif = dalDocType.FetchByAnyIdentifier(False, "+")
sb.Append("(SELECT ( ")
For Each row In dtModif.Rows
sb.Append("ISNULL((SELECT -SUM(amount) ")
sb.Append("FROM Sales." & row("TableName") & "Detail ")
sb.Append("WHERE ArticleID = articles.Article.ArticleId ")
sb.Append("AND DATEADD(Year,-1,GETDATE()) < Timestamp ")
sb.Append("),0) ")
sb.Append("+ ")
Next
dtModif = dalDocType.FetchByAnyIdentifier(False, "-")
For Each row In dtModif.Rows
sb.Append("ISNULL((SELECT +SUM(amount) ")
sb.Append("FROM Sales." & row("TableName") & "Detail ")
sb.Append("WHERE ArticleID = articles.Article.ArticleId ")
sb.Append("AND DATEADD(Year,-1,GETDATE()) < Timestamp ")
sb.Append("),0)")
sb.Append("+ ")
Next
sb = sb.Remove(sb.Length - 2, 2)
sb.Append(") )")
我得到了 stockmodifier 为正的每篇文章(所以卖得更多然后退回),然后我将所有 stockmodifier 为负的文章的负总和相加。通过这种方式,我可以获得该文章的销售次数。(可以是负数)。
我现在想知道,有没有更好的方法来构造这个查询?因为这基本上是对多个 SELECTS 的 SELECT,所以会影响大型数据库的性能。
提前致谢。