我有一个非常重要、非常缓慢的视图,其中在 where 子句中包含了一些非常丑陋的条件,例如这样。我也知道连接是粗略和慢速连接varchar(13)而不是整数标识字段,但想改进下面使用此视图的简单查询:
CREATE VIEW [dbo].[vwReallySlowView] AS
AS
SELECT
I.booking_no_v32 AS bkno,
I.trans_type_v41 AS trantype,
B.Assigned_to_v61 AS Assignbk,
B.order_date AS dateo, B.HourBooked AS HBooked,
B.MinBooked AS MBooked, B.SecBooked AS SBooked,
I.prep_on AS Pon, I.From_locn AS Flocn,
I.Trans_to_locn AS TTlocn,
(CASE I.prep_on WHEN 'Y' THEN I.PDate ELSE I.FirstDate END) AS PrDate, I.PTimeH AS PrTimeH, I.PTimeM AS PrTimeM,
(CASE WHEN I.RetnDate < I.FirstDate THEN I.FirstDate ELSE I.RetnDate END) AS RDatev, I.bit_field_v41 AS bitField, I.FirstDate AS FDatev, I.BookDate AS DBooked,
I.TimeBookedH …Run Code Online (Sandbox Code Playgroud) 如何在SCHEMABINDING不重新创建视图的情况下关闭视图?
我正在寻找一个通用术语,例如数据库抽象,它包括所有表格数据结构,如数据库表、视图、表格查询结果。
据我了解,“实体”不是正确的术语,因为它对应于表,而不是视图,甚至不是查询。“结果”对于可修改的数据结构来说是违反直觉的。
在专业环境中哪个是合适的术语?
昨天发生了不好的事情。
前一段时间创建的视图被某人修改,最终破坏了报告。很遗憾。有人(有意或无意)在 PRODUCTION 数据库中进行了此修改。
我的问题:有没有办法(脚本/软件/免费软件等)让我们知道谁(用户名)做了这个修改,这样我就可以撤销该用户对生产数据库的访问权限。
如果我的问题不清楚,请发表评论。
在分析数据库时,我遇到了一个视图,该视图引用了一些非确定性函数,对于此应用程序池中的每个连接,这些函数每分钟被访问1000-2500 次。一个简单的视图产生以下执行计划:SELECT
对于少于一千行且每隔几个月可能会看到一两行更改的视图来说,这似乎是一个复杂的计划。但以下其他注意事项会变得更糟:
UDFs 来构建字符串UDFs 以获取本地化语言的 ISO 代码UDF作为JOIN谓词INSERT/ UPDATE/DELETE在每个触发器来写入底层表CURSORS该EXEC存储过程作为参考更多的这些串建设UDF秒。这对我来说似乎很糟糕,但我只有几年的 TSQL 经验。也越来越好!
看来开发人员认为这是一个好主意,这样做是为了让存储的几百个字符串可以根据从UDF特定于模式的a 返回的字符串进行翻译。
这是堆栈中的一个视图,但它们都同样糟糕:
CREATE VIEW [UserWKStringI18N]
AS
SELECT b.WKType, b.WKIndex
, CASE
WHEN ISNULL(il.I18NID, N'') = N''
THEN id.I18NString
ELSE il.I18nString
END AS WKString
,CASE
WHEN ISNULL(il.I18NID, N'') …Run Code Online (Sandbox Code Playgroud) performance sql-server sql-server-2008-r2 view functions query-performance
我有一张桌子:
CREATE TABLE [dbo].[Realty](
[Id] [int] IDENTITY(1,1) NOT NULL,
[RankingBonus] [int] NOT NULL,
[Ranking] AS ([Id]+[RankingBonus]) PERSISTED NOT NULL
....
)
Run Code Online (Sandbox Code Playgroud)
还有一个观点:
CREATE View [dbo].[FilteredRealty] AS
SELECT
realty.Id as realtyId,
...
COALESCE(realty.Wgs84X, ruian_cobce.Wgs84X, ruian_obec.Wgs84X) as Wgs84X,
COALESCE(realty.Wgs84Y, ruian_cobce.Wgs84Y, ruian_obec.Wgs84Y) as Wgs84Y,
realty.Ranking,
...
FROM realty
JOIN Category ON realty.CategoryId = Category.Id
LEFT JOIN ruian_cobce ON realty.cobceId = ruian_cobce.cobce_kod
LEFT JOIN ruian_obec ON realty.obecId = ruian_obec.obec_kod
LEFT JOIN okres ON realty.okresId = okres.okres_kod
LEFT JOIN ExternFile ON realty.Id = ExternFile.ForeignId AND …Run Code Online (Sandbox Code Playgroud) 给定数据库角色,定义为存储过程user1的函数something()和创建的视图,如下所示:
CREATE VIEW view1 AS select * from something()
Run Code Online (Sandbox Code Playgroud)
并且,鉴于此权限:
REVOKE ALL ON FUNCTION something FROM user1
REVOKE SELECT ON view1 FROM user1
Run Code Online (Sandbox Code Playgroud)
当我运行时SELECT * FROM view1,出现错误permission denied for function something()。
我的问题是,如果我撤销对视图的选择权限,为什么会调用该函数?我期待收到类似的东西:
permission denied for relation view1
Run Code Online (Sandbox Code Playgroud)
谢谢!
对于搜索功能,我使用的视图包含我需要搜索的所有表中的记录。该视图有近 2000 万条记录。针对这种观点的搜索花费了太多时间。
我应该在哪里寻找改善此视图的性能?
视图的粗略定义如下。它包括十三张桌子和大约三十个字段。
CREATE VIEW [dbo].[v_AllForSearch]
AS
SELECT
FT.firstField AS [firstField]
, FT.fld_primary AS [fld_primary]
, FT.fld_thirdField AS [thirdField]
, FT.fld_fourthField AS [fourthField]
, ISNULL(ST.[fld_firstSearchField],'') AS [firstSearchField]
, ISNULL(TT.[fld_thirdSearch],'') AS thirdSearch
, ISNULL(TT.[fld_fourthSearch],'')AS fourthSearch
, ISNULL(TT.[fld_fifthSearch],'')AS fifthSearch
, ISNULL(FRT.[fld_sixthSearch],'') As [sixthSearch]
, ISNULL(FRT.[fld_seventhSearch],'') AS [seventhSearch]
, ISNULL(FRT.[fld_eightSearch],'')AS [eightSearch]
, ISNULL(FIT.[fld_nineSearch],'') AS [nineSearch]
, ISNULL(SIT.[fld_tenthSearch],'')AS [tenthSearch]
, ISNULL(SET.[fld_eleventhSearch],'') AS [eleventhSearch]
, ISNULL(ET.[twelthSearch],'')AS [twelthSearch]
, ISNULL(NT.[thirteenthSearch],'')AS [thirteenthSearch]
, ISNULL(NT.[fourteenSearch],'') AS [fourteenSearch]
, ISNULL(NT.[fifteenSearch],'') AS [fifteenSearch]
, ISNULL(NT.[sxteenSearch],'') AS [sxteenSearch]
, …Run Code Online (Sandbox Code Playgroud) 我想使用 WITH 子句创建 VIEW,但真的找不到任何关于正确语法的参考。
我想要这样
WITH TempTbl AS (SELECT ...)
CREATE VIEW SomeView
SELECT *
FROM TempTbl
Run Code Online (Sandbox Code Playgroud)
使用多个 WITH 子句的正确语法是什么?
MSDN 上没有任何用处 :(
view ×10
sql-server ×6
erd ×1
functions ×1
index ×1
null ×1
optimization ×1
performance ×1
permissions ×1
postgresql ×1
query ×1
t-sql ×1
table ×1
terminology ×1