gpt4 book ai didi

SQL:在内部使用过滤器查看或在选择时使用过滤器查看

转载 作者:行者123 更新时间:2023-12-04 22:04:36 25 4
gpt4 key购买 nike

我一直在研究一个使用大量 View 的数据库,并且表记录只有 100 万行,但是等待我的查询显示很痛苦。

我想复制 View 并在里面放一个“WHERE CLAUSE”。现在我的问题:

在 View 中放置 where 子句是否更快。例如,我会将所有客户类型设为 = 'BIZ'。

或者如果我只使用 View “SELECT * FROM VIEW_CUSTOMER WHERE type = 'BIZ'”是否相同

最佳答案

在此脚本的帮助下,可以使用 where 子句创建 View

DECLARE @pref nvarchar(10) = '_type$biz',
@where_clause nvarchar(max) = 'WHERE 1 = 1',
@dsql nvarchar(max) = ''
IF OBJECT_ID('tempdb.dbo.#tmp') IS NOT NULL DROP TABLE dbo.#tmp
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS rn,
'CREATE VIEW ' + SCHEMA_NAME(o.schema_id) + '.' + OBJECT_NAME(o.object_id) + @pref
+ ' AS SELECT * FROM ' + SCHEMA_NAME(o.schema_id) + '.' + OBJECT_NAME(o.object_id) + ' ' + @where_clause AS def
INTO dbo.#tmp
FROM sys.sql_modules m JOIN sys.objects o ON m.object_id = o.object_id
WHERE o.type = 'V'

DECLARE @i int = (SELECT MIN(rn) FROM dbo.#tmp)

WHILE (@i IS NOT NULL)
BEGIN
SELECT @dsql = def FROM dbo.#tmp WHERE rn = @i
EXEC sp_executesql @dsql
SELECT @i = MIN(rn) FROM dbo.#tmp WHERE rn > @i
END

关于SQL:在内部使用过滤器查看或在选择时使用过滤器查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13371912/

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