对视图执行的查询有哪些优化和/或更改?(如果还知道每个主要数据库 - Oracle、SQL Server、Postgres、MySQL/MariaDB - 是否以不同方式处理这个问题,那就太好了)。
例如,假设我有以下观点:
CREATE VIEW my_view AS
SELECT
id,
val0,
val1,
val2
FROM my_table
WHERE val0 = 42;
Run Code Online (Sandbox Code Playgroud)
...我想对该视图执行以下查询:
SELECT
id,
val1
FROM my_view
WHERE val2 = 'Fish fingers and custard';
Run Code Online (Sandbox Code Playgroud)
...数据库是优化查询还是本质上执行了两个选择?IE 是否与执行下面的潜在查询 1 或 2 或两者都不相同?
潜在问题 1:
SELECT
id,
val1
FROM (
SELECT
id,
val0,
val1,
val2
FROM my_table
WHERE val0 = 42
)
WHERE val2 = 'Fish fingers and custard';
Run Code Online (Sandbox Code Playgroud)
潜在问题 2:
SELECT
id,
val1
FROM my_table
WHERE val0 = …
Run Code Online (Sandbox Code Playgroud)