从单个标识符表中构建和执行SQL中的多个where子句的最高性能方法是什么?

时间:2018-04-18 23:26:03

标签: sql sql-server

这是挑战。用户希望能够基于N标准创建过滤器,并且用于过滤器的标准是流体层次结构。为了简化它,我们使用两个用户可以选择的层次结构:

  1. 所有地区
    • 欧洲
      • UK
      • 法国
    • 美洲
      • US
      • 加拿大
      • 墨西哥
  2. 媒体
    • 音乐
      • 下载
      • 的CD
      • DVD
  3. 对象将有一个与之关联的标签表。 ObjectsTags表将包含一个指标作为两个标记链接到

    的数据类型

    问题是用户想要选择并分组他们想要过滤的标签。所以他们可能想要欧洲的电影,所以他们会选择这三个标签作为单个分组过滤器。根据以下三个标记获得过滤器很容易: 任何具有以下标签的对象:(所有地区或欧洲或英国或法国)和(所有媒体或电影或DVD或流媒体)。挑战在于我需要支持可能需要的任何数量的新层次结构以及任何级别的过滤器,因为用户还可能需要一个过滤器来返回该过滤器以及美国所有CD中的所有内容。

    SQL Server中是否有任何新功能更适合以高效的方式处理这种类型的where子句?

1 个答案:

答案 0 :(得分:0)

您要么必须动态创建where子句,要么使用类似于以下内容的where子句预创建SQL:

where country = coalesce(p_country, country)
  and media   = coalesce(p_media, medias)
  and music   = coalesce(p_music, music)
  

这句话真的很酷吗?你的表现将是   最糟糕的是它可能是。

我建议使用您需要的特定条件创建动态语句。