标签: view

oracle中的物化视图

oracle中如何实现物化视图?我在 oracle 中创建了一个物化视图。我现在看到的是一张有工作的很普通的桌子。物化视图是否在 oracle 中转换为表和作业?

oracle view

9
推荐指数
1
解决办法
1357
查看次数

如何帮助 SQL Server 识别我的索引视图列不能为 NULL?

我在 SQL Server 2008 中定义了以下索引视图(您可以从 gist下载工作架构以进行测试):

CREATE VIEW dbo.balances
WITH SCHEMABINDING
AS
SELECT
      user_id
    , currency_id

    , SUM(transaction_amount)   AS balance_amount
    , COUNT_BIG(*)              AS transaction_count
FROM dbo.transactions
GROUP BY
      user_id
    , currency_id
;
GO

CREATE UNIQUE CLUSTERED INDEX UQ_balances_user_id_currency_id
ON dbo.balances (
      user_id
    , currency_id
);
GO
Run Code Online (Sandbox Code Playgroud)

user_idcurrency_idtransaction_amount都定义为 中的NOT NULLdbo.transactions。但是,当我查看 Management Studio 的对象资源管理器中的视图定义时,它在视图中将balance_amount和都标记transaction_countNULL可列。

我查看了几个讨论,是其中最相关的一个,建议对函数进行一些改组可能有助于 SQL Server 识别视图列始终为NOT NULL. 但是,在我的情况下不可能进行这种改组,因为在索引视图中不允许 …

sql-server-2008 null constraint view

9
推荐指数
2
解决办法
4833
查看次数

如何获取视图的执行计划?

我有一个包含多个视图的模式。我需要检查执行计划以确保适当的索引到位并被使用。

我该怎么做呢?

我宁愿不必将输出复制并粘贴show create view <viewname>到 中explain,尤其是当某些视图构建在其他视图之上时,这将非常痛苦。

mysql performance execution-plan view

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

Inline-TVF 的性能 vs. 视图

我有一个数据库,我在其中使用内联 TVF(表值函数)而不是视图。例如,我可能有两个名为 [汽车模型] 和 [汽车制造商] 的表,我在 TVF [fnCarBrands] 中将它们连接在一起。

这些 TVF 然后被其他 TVF 调用以进行进一步的处理和报告。所以我可能将我的函数 [fnCarBrands] 连接到表 [Purchase Year] 以形成一个函数 [fnCarBrandHistory]。对多层 TVF 依此类推。

我可能可以使用视图获得相同的功能,因为我的内联 TVF 实际上只是表和其他 TVF 的连接。

以这种方式编写的内联 TVF 的性能与视图相比如何?

performance sql-server-2005 view functions

9
推荐指数
1
解决办法
3990
查看次数

授予视图权限,拒绝选择表

我有一个 MySQL 用户,我希望它只查看我想要的视图,而不是数据库中的任何其他表。我仅授予此用户对某些视图的权限,如下所示:

GRANT SHOW VIEW ON `myDatabase`.`awesome_view` TO 'thisUser'@'%'
Run Code Online (Sandbox Code Playgroud)

如果我做一个show grants;声明,我只能按预期看到这个权限。但是我希望这个用户只查询视图而不是与这些视图相关的表,但我找不到办法做到这一点。似乎是如果我希望用户对视图进行选择,则还必须为表授予选择权,还是我错了?

如果我拒绝select其余表中的语句,并且在命令行中我尝试进行选择,我会得到以下信息:

SELECT * FROM myDatabase.fordibenForYouTable;
ERROR 1142 (42000): SELECT command denied to user 'thisUser'@'localhost' for table 'fordibenForYouTable'
Run Code Online (Sandbox Code Playgroud)

这确实是我想要的,但如果我选择视图数据,我也会被拒绝。

有没有一种方法可以让用户只看到视图而不是表格?

mysql permissions view

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

Postgresql 重命名表而不更新视图定义

我今天发现在 Postgresql 中重命名表也会重命名使用我自动重命名的表的视图的 VIEW 定义?有什么办法可以关闭这个功能吗?

所以我重命名表:

ALTER TABLE xyz RENAME TO abc;
Run Code Online (Sandbox Code Playgroud)

举例来说,我的 VIEW 定义是:

CREATE VIEW foo AS SELECT * FROM xyz;
Run Code Online (Sandbox Code Playgroud)

重命名表后,我知道的下一件事是,foo 的定义已更改为指向表 abc。

我正在使用 Postgresql 8.4

--更新时间:2014 年 12 月 30 日下午 12:41--

这是一个测试用例来说明我的意思:

CREATE TABLE tmp_test_a (num integer);
CREATE VIEW v_tmp_test_a AS SELECT * FROM tmp_test_a;

-- Now look at what the VIEW is using (now is using tmp_test_a, which is what it should be using):
SELECT pg_get_viewdef('v_tmp_test_a'::regclass, false);

-- Now create a second table, and …
Run Code Online (Sandbox Code Playgroud)

postgresql view postgresql-8.4

9
推荐指数
1
解决办法
4504
查看次数

如何针对索引改进受 DateAdd() 约束的视图中 1 行的估计

使用 Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64)。

给定一个表和索引:

create table [User].[Session] 
(
  SessionId int identity(1, 1) not null primary key
  CreatedUtc datetime2(7) not null default sysutcdatetime())
)

create nonclustered index [IX_User_Session_CreatedUtc]
on [User].[Session]([CreatedUtc]) include (SessionId)
Run Code Online (Sandbox Code Playgroud)

以下每个查询的实际行数为 310 万,估计行数显示为注释。

当这些查询在 View 中提供另一个查询,由于 1 行估计,优化器选择循环连接。 如何在此基础级别改进估计以避免覆盖父查询连接提示或求助于 SP?

使用硬编码日期效果很好:

 select distinct SessionId from [User].Session -- 2.9M (great)
  where CreatedUtc > '04/08/2015'  -- but hardcoded
Run Code Online (Sandbox Code Playgroud)

这些等效查询与视图兼容,但都估计为 1 行:

select distinct SessionId from [User].Session -- 1
 where CreatedUtc …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization view sql-server-2012

9
推荐指数
2
解决办法
372
查看次数

PostgreSQL - 使用自动增量列创建视图

我有一个 PostgreSQL 表,我需要创建一个带有新列的视图。此列需要是从 1 开始到 N 的自动增量列。

这是否可以在不影响遗留数据结构的原始模式的情况下完成?

postgresql view postgresql-9.2

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

为什么 SQL 尝试转换被我的 where 子句排除的行?

我已经多次遇到过这种情况,我相信这是有充分理由的 - 但我该如何避免呢?

我确定这与周围的怪癖有关isnumeric。在英语中,我有一个过滤isnumeric(somefield) = 1. 然后我尝试int在我的where子句中使用 an 来查询它,因为表中的其他一些字段有字符值,所以整个事情都失败了。

我创建了一个显示错误的SQL 小提琴

我尝试cast/convert在视图的 select 中执行 a ,但查询引擎似乎忽略了它。

那么 - 为什么会发生这种情况,有没有一种干净的方法来处理它?

由于我在插入物上缺少引号,原始小提琴有一个非常相似的错误。这不是我试图强调的问题。我通过为所有插入的值添加引号来修复视图。

sql-server view type-conversion

8
推荐指数
2
解决办法
2537
查看次数

Postgres 会执行在视图中未选择的计算列的计算吗?

我试图了解从视图中选择数据的性能影响,其中视图中的一列是原始表中其他数据的函数。

无论计算列是否在所选列的列表中,是否都会执行计算?

如果我有一张桌子并且视图像这样声明

CREATE TABLE price_data (
    ticker     text,          -- Ticker of the stock
    ddate      date,          -- Date for this price
    price      float8,        -- Closing price on this date
    factor     float8         -- Factor to convert this price to USD
);

CREATE VIEW prices AS 
    SELECT ticker, 
           ddate,
           price,
           factor,
           price * factor as price_usd
    FROM price_data
Run Code Online (Sandbox Code Playgroud)

乘法类似下面的查询来执行?

select ticker, ddate, price, factor from prices
Run Code Online (Sandbox Code Playgroud)

是否有参考以一种方式或另一种方式保证这一点?我正在阅读有关 Postgres 规则系统的文档,但我认为答案确实在于优化器,因为规则系统文档中没有任何内容表明它不会被选中。

我怀疑在上述情况下没有执行计算。我将视图更改为使用除法而不是乘法,并将0for插入factorprice_data. 上面的查询没有失败,但如果修改查询以选择计算列,则修改后的查询失败。

有什么方法可以理解在执行 a 时 …

postgresql view

8
推荐指数
1
解决办法
718
查看次数