簡體   English   中英

從單個標識符表中構建和執行SQL中的多where子句的最有效方式是什么?

[英]What is the most performant way to build and execute a multiple where clause in SQL from a single table of identifiers?

這是挑戰。 用戶希望能夠基於N標准創建過濾器,並且用於過濾器的標准是一種流體層次結構。 為了簡化它,讓我們使用用戶可以從中選擇的兩個層次結構:

  1. 所有地區
    • 歐洲
      • 英國
      • 法國
    • 美洲
      • 我們
      • 加拿大
      • 墨西哥
  2. 媒體
    • 音樂
      • 資料下載
      • 光盤
    • 電影
      • 流媒體
      • DVD

對象將具有與其關聯的標簽表。 ObjectsTags表將包含一個指示符,該指示符是將標簽鏈接到的數據的兩種類型

問題是用戶希望選擇和分組他們要過濾的標簽。 因此,他們可能想要在歐洲發行電影,因此他們會選擇這三個標簽作為單個分組過濾器。 獲得基於以下三個標簽的過濾器很容易:帶有以下標簽的任何對象:(所有領土或歐洲或英國或法國)和(所有媒體或電影或DVD或流媒體)。 挑戰在於,我需要支持可能需要的任何數量的新層次結構以及任何級別的過濾器,因為用戶還可能需要一個過濾器,該過濾器可以返回該過濾器以及美國所有CD的所有內容。

SQL Server中是否有任何新功能更適合以高性能方式處理此類where子句?

您將不得不動態地創建where子句,或者將使用類似於以下內容的where子句來預先創建SQL:

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

此聲明最酷的部分是? 您的表現可能會是最糟糕的。

我建議根據您的特定條件創建一個動態語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM