我已经物化了我想改变其刷新时间的视图:
REFRESH FORCE START WITH SYSDATE NEXT SYSDATE +1 DISABLE QUERY REWRITE
Run Code Online (Sandbox Code Playgroud)
我想知道这方面的一些事情。
NEXT SYSDATE +1描绘?DISABLE QUERY REWRITE?我正在尝试在引用带有屏蔽列的表(SQL Server 2016)的视图上创建索引。屏蔽列不是该表中唯一的列,并且未在视图中使用。
create unique clustered index [IX_Name]
on dbo.vw_ViewName(SomeUniqueId)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
无法创建视图“dbo.vw_ViewName”上的索引,因为该视图正在引用带有屏蔽列的表“dbo.TableName”。
在另一个未启用屏蔽的环境中,索引创建成功。
我浏览了大约四页的 Google 结果,但没有找到任何合理的错误描述。我很感激任何关于错误的知识转移以及为什么不可能创建这样的索引。
这是一些重现问题的 SQL:
drop view if exists dbo.vw_Aggregate
drop table if exists dbo.MainTable, dbo.SecondaryTable
go
create table dbo.MainTable
(
MainTableId uniqueidentifier primary key,
SomeExternalId uniqueidentifier,
SecondaryTableId uniqueidentifier
)
go
create table dbo.SecondaryTable
(
SecondaryTableId uniqueidentifier primary key,
CreatedOn datetime,
Amount decimal(19, 8),
-- the below column produces error,
-- if commented out - there is no error
[Description] nvarchar(max) masked with (function = 'default()'),
Dummy …Run Code Online (Sandbox Code Playgroud) sql-server materialized-view sql-server-2016 data-masking dynamic-data-masking
我有一个物化视图,创建大约需要 57 秒,并且我使用的是 PostgreSQL 9.4。
当我插入表时,触发器将调用触发器函数,该函数将REFRESH MATERIALIZED VIEW CONCURRENTLY view触发触发器after each statement(插入、更新、删除)
发生的情况是,执行插入操作大约需要 57 秒。
如何解决此问题并仍然使用物化视图?
我已经实现了很长时间,从来没有出现过这个问题,最近我添加了pgbouncer,会不会是这个原因?
我想创建一个与此类似的索引视图(稍微简化):
Create VIEW dbo._v1
WITH SCHEMABINDING
AS
SELECT
COUNT_BIG(*) as CB
,[ID]
,TITLE]
,dbo.getXmlTranslation1(acat.[TITLE], 'de-DE') as T
FROM dbo.[ArticleCategory] acat
Group by
[ID]
,[TITLE]
Run Code Online (Sandbox Code Playgroud)
在此上创建唯一聚集索引失败:
CREATE unique CLUSTERED INDEX __CLIX
ON dbo._v1([ID]);
Run Code Online (Sandbox Code Playgroud)
无法在视图“db._v1T”上创建聚集索引“__CLIX”,因为视图的选择列表包含聚合函数或分组列结果的表达式。考虑从选择列表中删除聚合函数或分组列结果的表达式。
我搜索了解决方案,但找不到。如果我删除 GROUP BY(我在这里真的不需要),我会被告知由于多个 [ID] 结果,无法创建唯一聚集索引。我添加了标量函数调用,以解决索引视图中不允许的 XML 操作。我检查了标量函数是否是确定性的,是什么情况。
部分出于好奇,我想知道是否可以使用索引(物化)视图来加速对某个基表的计数查询。
查询类似于
SELECT COUNT(*)
FROM BaseTable
WHERE Slot = ?;
Run Code Online (Sandbox Code Playgroud)
所以我创建了一个视图
CREATE VIEW IndexedView
WITH SCHEMABINDING AS
SELECT bt.Slot, COUNT_BIG(*) AS COUNT
FROM dbo.BaseTable bt
GROUP BY bt.Slot;
Run Code Online (Sandbox Code Playgroud)
有聚集索引
CREATE UNIQUE CLUSTERED INDEX IX_Main
ON IndexedView (Slot);
Run Code Online (Sandbox Code Playgroud)
这有效,我现在可以将原始查询编写为
SELECT COUNT
FROM IndexedView
WHERE Slot = ?
Run Code Online (Sandbox Code Playgroud)
并更快地获得所需的结果。
唉,这对我来说没什么用,因为我的查询通常不是手工制作的。我真的需要通过使用索引视图作为某种索引来使原始查询变得更快BaseTable- 我想我在某处读到这可能在某些情况下发生,但根据我的测试,而不是在这个测试中。
所以我的问题是:
编辑:关于重复的问题 - 我对 GROUP BY 和索引视图的聚合方面更感兴趣。答案帮助我找到了我犯的一个愚蠢的错误,现在它也对我有用。
JOYOUS ADDENDUM:现在我让它工作了,我成功地测试了它甚至可以在查询包含左联接的情况下工作,而在这些情况下,左联接实际上可以被优化掉(即 on-clause 涵盖了一个唯一索引在连接表中)。
这真的很棒,因为这意味着即使在带有左连接的查询的情况下,也可以以这样一种方式设计模式,即快速获取所有内容或特定分组的总行数。
我找不到有关为 oracle 的物化视图刷新设置特定时间的正确文档。我阅读了文档和那里的一些示例,但是没有关于使用 NEXT 子句的明确文档。例如,我将如何在每天上午 8 点和晚上 8 点设置刷新?我将如何实现每天刷新 3 次?
这是我在我的案例中使用的。我知道这将在明天早上 7 点开始刷新,接下来每 12 小时刷新一次?
alter materialized view MY_VIEW
refresh fast
start with (sysdate+1) + 7/24
next trunc(sysdate) + ((trunc(to_char(sysdate,'HH24')/12)*12)+12)/24
Run Code Online (Sandbox Code Playgroud)
我还想知道是否有办法知道如何在设置时间后验证物化视图是否已刷新。
更新:我试图每小时刷新我的 MV,但没有奏效。我想知道为什么会这样。这是我使用的:
CREATE MATERIALIZED VIEW "MYVIEW"
ORGANIZATION HEAP PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "APEX_xxxxxxxxxxxxxxxxxx"
BUILD IMMEDIATE
USING INDEX
REFRESH FAST ON …Run Code Online (Sandbox Code Playgroud) 我有一个从 Oracle(11.2.0.4) 物化视图获取数据的应用程序,当关联表上发生任何 DML 操作或关联对象无效时,物化视图的预期行为将变为无效。
我的物化视图选项如下所列,并确认关联对象始终有效。
CREATE materialized VIEW mv_emp_test1
NOLOGGING COMPRESS build IMMEDIATE
REFRESH FORCE
START WITH (SYSDATE) NEXT (SYSDATE+5/1024)
as
......
Run Code Online (Sandbox Code Playgroud)
当物化视图每 5 分钟刷新一次时,它会进入 INVALID 状态,并且如果应用以下任何方法,则变为有效状态:
alter materialized view mv_emp_test1 recompile;
or
exec dbms_mview.refresh('mv_emp_test1');
Run Code Online (Sandbox Code Playgroud)
另外,检查了相关文档和错误,metalink中的Doc ID 264036.1已经包含了确切的场景,但没有找到适当的解决方法,以便每5分钟自动刷新一次。
Postgres 的文档说明:
虽然访问存储在物化视图中的数据通常比直接或通过视图访问底层表快得多,但数据并不总是最新的;
https://www.postgresql.org/docs/9.6/rules-materializedviews.html
为什么它“通常要快得多”?
我有一个物化视图。我想创建它的副本,以便我可以修改一些数据来测试有关问题及其可能解决方案的一些理论。
如何将此 MV 复制为表格?该副本将驻留在同一架构中,但具有不同的名称。该副本应该是 MV 的相同副本(结构和数据),它只是一个表格,因此我编辑数据。
我正在设计一个基于 NBA 统计网站 ( http://stats.nba.com/player/#!/201939/?p=stephen-curry ) 的数据库
如果您转到发布在球员统计数据上的链接,您会注意到球员的统计数据是根据不同因素(例如季节、月份、位置、主场或客场等)进行组织的,您可以根据过滤器进行设置环境。
问题是,设计站点数据库的人如何允许有效查询每个玩家的统计数据。每个玩家都会有一系列的游戏日志,这些日志会记录他们每个季度的统计数据。
他们是否使用物化视图来计算月度和季节性统计数据以进行高效查询?
我尝试设计以下数据库:
我有这张桌子
create table SkaData.FiscalPeriod(
PeriodNo int not null constraint FiscalPeriod_FK_BasePeriod references SkaData.Period(Number)
,YearEndMonthNo int not null constraint Fiscalperiod_CK_YearEnd check (YearEndMonthNo between 1 and 12)
,ContributionType char(4) not null constraint FiscalPeriod_CK_ContribType check(ContributionType in ('Base','Cr','Dr'))
,ContributionSign int not null constraint FiscalPeriod_CK_ContribSign check(ContributionSign in (+1,-1))
,ContributionPeriodNo int not null constraint FiscalPeriod_FK_ContribPeriod references SkaData.Period(Number)
,constraint FiscalPeriod_PK unique clustered (PeriodNo,YearEndMonthNo,ContributionType)
);
Run Code Online (Sandbox Code Playgroud)
目前填充为
insert Skadata.FiscalPeriod(
PeriodNo,YearEndMonthNo,ContributionType,ContributionperiodNo,ContributionSign)
select
data.PeriodNo
,YearEndMonthNo
,ContributionType
,ContributionPeriodNo = pvt.PeriodNo
,ContributionSign = pvt.Sign
from (
select
YearEndMonthNo = N
,PeriodNo = Period.Number
,CreditPeriodNo …Run Code Online (Sandbox Code Playgroud) 我有一个视图,它有一个聚集索引和其他非聚集索引。
SELECT即使我选择了一个索引列,一个简单的查询也不使用任何索引。
这可能是什么原因?
我在 Windows NT 6.1 (Build 7600) 上使用 Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 企业版
sql-server optimization sql-server-2008-r2 materialized-view
sql-server ×5
oracle ×4
postgresql ×2
data-masking ×1
index ×1
optimization ×1
oracle-apex ×1
pgbouncer ×1