小编mak*_*ays的帖子

FROM子句中的SQL子查询

我理解,如果使用不正确,子查询对性能的影响是非常糟糕的.我有一个非常具体的场景,用户需要从表中检索过滤的记录集.将提供各种各样的过滤器,它们必须支持组合.此外,一组开发人员将定期创建新的过滤器.

我不喜欢一个增长的,单片的SQL查询与大量参数的想法.我不喜欢一堆具有相同SELECT语句和不同WHERE子句的自治SQL查询.我喜欢动态SQL查询的想法,但我不确定我应该使用什么样的结构.我可以想到4个基本选项:(如果还有更多我不知道的话,那么请不要犹豫,建议他们)

  1. "INNER JOIN":通过INNER JOINS连接过滤器以过滤结果.
  2. "FROM子查询":通过FROM语句中的子查询进行堆栈过滤.
  3. "WHERE子查询":通过WHERE子句中的子查询来连接过滤器.
  4. "INNER JOIN子查询":一个奇怪的混合体.

我创建了一个SQL小提琴来演示(和配置)它们:

http://sqlfiddle.com/#!3/4e17b/9

下面是小提琴的摘录,提供我正在谈论的内容:

------------------------------------------------------------------------
--THIS IS AN EXCERPT FROM THE SQL FIDDLE -- IT IS NOT MEANT TO COMPILE--
------------------------------------------------------------------------

--
--"INNER JOIN" test
      SELECT COUNT(*) 
      FROM 
            @TestTable Test0
            INNER JOIN @TestTable Test1 ON Test1.ID=Test0.ID AND Test1.ID % @i = 0
            INNER JOIN @TestTable Test2 ON Test2.ID=Test0.ID AND Test2.ID % @j = 0
            INNER JOIN @TestTable Test3 ON Test3.ID=Test0.ID AND Test3.ID % @k = 0

--
--"FROM subqueries" test   
      SELECT COUNT(*) …
Run Code Online (Sandbox Code Playgroud)

sql-server subquery dynamic-sql

5
推荐指数
1
解决办法
5406
查看次数

标签 统计

dynamic-sql ×1

sql-server ×1

subquery ×1