sql - 在不使用临时表的情况下优化查询并优化用户体验
问题描述
情况:
我对此并不陌生,但只是想出了如何创建表值函数和存储过程。我为客户创建了一些。当我创建一个带有参数日期的表值函数时,我遇到了一个问题。在查询本身中,有一些 CTE。执行该函数时,查询将永远加载,最终我必须停止它(参见下面的示例)。
因此,我将 CTE 分为 2 个主temp
表和一个加载临时表的查询。不知何故,这表现得更好(参见下面的示例)。
客观的:
在用户不必手动运行临时表的情况下,我有哪些选项。用户也应该很容易像存储过程或函数一样执行查询。
例子:
我有一个看起来像一个小时后仍在运行的东西。
CREATE FUNCTION dbo.example
(@StartDate AS DATE)
RETURNS TABLE
AS
RETURN
WITH CTE AS
(........),
CTE2 AS (.....)
SELECT *
FROM CTE2 ...
JOINS...
所以我创建了临时表,它表现得非常好:
DECLARE @StartDate AS DATE = ....
SELECT * INTO #cte FROM (query) temp1
DECLARE @StartDate AS DATE = ....
SELECT * INTO #cte2 FROM (query) temp1
SELECT *
FROM #cte2....
JOIN ....
我的替代方案是什么?
谢谢!
解决方案
推荐阅读
- sql - 将一列中的字符串拆分为表维护 ID 的多个分隔符
- php - 与 laravel-datatable 中的排序和分页功能冲突
- c# - 创建一个接受具有返回类型的函数的动作
- python - Plotly 和袖扣在 Anaconda 中不起作用
- function - 函数是如何工作的
- xamarin - 在 Xamarin 移动应用程序中使用 Azure B2C 和 MSAL 对 Web Api 进行身份验证
- live-wallpaper - 动态壁纸问题
- python - python中的键盘输入数据类型
- oracle - 在 oracle 中,如果另一个存储过程(在第一个过程中被调用)失败,存储过程是否无法进一步执行
- tomcat - ApacheTomcat - 301 重定向