标签: view

执行计划显示昂贵的 CONVERT_IMPLICIT 操作。我可以通过索引解决这个问题还是需要更改表?

我有一个非常重要、非常缓慢的视图,其中在 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)

sql-server view

25
推荐指数
1
解决办法
1万
查看次数

24
推荐指数
3
解决办法
3万
查看次数

表和视图有通用术语吗?

我正在寻找一个通用术语,例如数据库抽象,它包括所有表格数据结构,如数据库表、视图、表格查询结果。

据我了解,“实体”不是正确的术语,因为它对应于表,而不是视图,甚至不是查询。“结果”对于可修改的数据结构来说是违反直觉的。

在专业环境中哪个是合适的术语?

query terminology view table

23
推荐指数
2
解决办法
3249
查看次数

确定架构更改是如何发生的?

昨天发生了不好的事情。

前一段时间创建的视图被某人修改,最终破坏了报告。很遗憾。有人(有意或无意)在 PRODUCTION 数据库中进行了此修改。

我的问题:有没有办法(脚本/软件/免费软件等)让我们知道谁(用户名)做了这个修改,这样我就可以撤销该用户对生产数据库的访问权限。

如果我的问题不清楚,请发表评论。

sql-server view

21
推荐指数
3
解决办法
2万
查看次数

SQL Server - 在嵌套的非确定性视图堆栈中处理字符串的本地化

在分析数据库时,我遇到了一个视图,该视图引用了一些非确定性函数,对于此应用程序池中的每个连接,这些函数每分钟被访问1000-2500 次。一个简单的视图产生以下执行计划:SELECT

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

对于少于一千行且每隔几个月可能会看到一两行更改的视图来说,这似乎是一个复杂的计划。但以下其他注意事项会变得更糟:

  1. 嵌套视图是不确定的,所以我们不能索引它们
  2. 每个视图引用多个 UDFs 来构建字符串
  3. 每个 UDF 包含嵌套 UDFs 以获取本地化语言的 ISO 代码
  4. 堆栈中的视图使用s返回的附加字符串构建器UDF作为JOIN谓词
  5. 每个视图堆被视为一个表,这意味着有INSERT/ UPDATE/DELETE在每个触发器来写入底层表
  6. 在视图上,这些触发器使用CURSORSEXEC存储过程作为参考更多的这些串建设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

20
推荐指数
1
解决办法
1037
查看次数

为什么 NOT NULL 计算列在视图中被认为可以为空?

我有一张桌子:

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)

null sql-server view computed-column

17
推荐指数
2
解决办法
8741
查看次数

PostgreSQL 以什么顺序检查对象权限?

给定数据库角色,定义为存储过程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)

谢谢!

postgresql permissions view

16
推荐指数
1
解决办法
446
查看次数

您如何在 ERD 中表示 VIEWS?

视图(创建视图)是否在 ERD 中表示?如果是这样,您如何表示它们并指定它们来自哪些表?

erd view

15
推荐指数
1
解决办法
8527
查看次数

如何更快地查询这 2000 万条记录视图?

对于搜索功能,我使用的视图包含我需要搜索的所有表中的记录。该视图有近 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)

index sql-server optimization view

14
推荐指数
3
解决办法
8112
查看次数

在 CREATE VIEW 中使用 WITH 处理 SQL

我想使用 WITH 子句创建 VIEW,但真的找不到任何关于正确语法的参考。

我想要这样

WITH TempTbl AS (SELECT ...)
CREATE VIEW SomeView
SELECT *
FROM TempTbl
Run Code Online (Sandbox Code Playgroud)

使用多个 WITH 子句的正确语法是什么?

MSDN 上没有任何用处 :(

t-sql view

14
推荐指数
2
解决办法
4万
查看次数