MSSQL 查询调优

MSSQL query tuning

我有以下场景:

1 Client have 2 products lists (one common, one private), those lists have many products, some products can appear in the two lists. If the product appear in the private list, I want to get it, otherwise I'll take the one in the common list.

您认为实现此目标的最快方法是什么?到目前为止,我已经尝试了以下方法:

是否有其他方法可以实现这一点?

编辑

这是 fiddle 展示我所拥有的 http://sqlfiddle.com/#!6/41d2e/2

在 fiddle 中,我假设列表 ID 为 7 和 1,因为它们是客户 1 的列表 ID,我没有使用连接,因为我已经从 php 中检索到了这些 ID。

我需要的是从私有列表中检索产品(如果存在),否则从 public

作为一个 mysql 人,我通常会在没有聚合的情况下使用 group by 来执行此操作,因此按 mysql 的正确顺序会简单地删除不需要的记录(不好的做法,但是坚固且性能足够):

select *
from pricelist
where listId in (1, 7) 
order by listId asc
group by artnum

因此,例如,如果我想获取客户 ID 1 的所有产品,我需要检索这些产品:

ID  ARTNUM  ARTDES  LISTID  PRICE
1   1000    potatoes    1   20
1   1001    carrots     7   4

由于客户端 1 有 2 个列表:1 和 7(土豆同时出现在列表 1 和 7 中,所以我只想要客户端私有列表中的土豆,而不是 public 中的土豆)

希望我说得够清楚,抱歉所有这些编辑

因为我不知道如何在纯 SQL 中正确地做到这一点,我使用了 PHP 方法:

  • 检索没有 UNION / UNION ALL 的两个查询
  • 创建 2 php collections
  • 合并 2 collections 删除重复项