gpt4 book ai didi

sql - 仅当存在记录时,t-sql 才在表中包含内部联接

转载 作者:行者123 更新时间:2023-12-05 03:14:03 25 4
gpt4 key购买 nike

我有一个非常大的表,里面有成吨成吨的记录。

[HugeTable](id, col1, col2, col3...)

前端应用程序中有一个页面显示了基于许多过滤器的 [HugeTable] 数据。如果不为空,其中一个过滤器将给出 [HugeTable] 的子集

#HugeTable_subset(id)

如果存在此过滤器,#HugeTable_subset 将有记录。我想将 [HugeTable] 数据缩小为仅匹配 #HugeTable_subset 中的记录。

所以现在,在 t-sql 中,我正在做一个 if-else 类型的查询

IF (SELECT Count(*) FROM #HugeTable_subset) > 0
BEGIN
SELECT HugeTable.* FROM [HugeTable] h
JOIN #HugeTable_subset t
ON h.id = t.id
WHERE h.params = @searchParams
END
ELSE
BEGIN
SELECT * FROM [HugeTable] h
WHERE h.params = @searchParams
END

有没有办法将这两个选择合并为一个?

最佳答案

要将两个选择合并为一个,您只需使用 LEFT OUTTER JOIN 而不是 INNER JOIN。您可能已经知道,是的,也许您不知道您已经以最优化的方式进行了。 sql-server 会为 IF-ELSE 中的每个选择创建两个子查询计划并正确使用每个计划。

你可以酸测试它看看是否有任何区别,如果 IF-ELSE 真的击败了 LEFT JOIN 选项

还有两点我可以指出。

1) 过滤器上的良好索引确实可以提高您的性能。

2) 您可以使用分页仅返回少量结果,从而在结果返回大量记录时提高性能和用户体验

关于sql - 仅当存在记录时,t-sql 才在表中包含内部联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27564630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com