同一查询的这两个版本在性能方面有什么不同吗?
--Version 1
SELECT p.Name, s.OrderQty
FROM Product p
INNER JOIN SalesOrderDetail s on p.ProductID = s.ProductID
--Version 2
SELECT p.Name, s.OrderQty
FROM Product p
INNER JOIN (SELECT ProductID, OrderQty FROM SalesOrderDetail) s on p.ProductID = s.ProductID
Run Code Online (Sandbox Code Playgroud)
我听说(由DBA)说版本2更快,因为它在内部SELECT语句中仅获取查询所需的列.但这似乎没有意义,因为查询性能(据我所知)是基于受影响的行数和返回的最终列列表.
两者的查询计划是相同的,所以我猜这两者之间没有任何区别.
我对么?
我将物化视图设置为REFRESH FAST ON COMMIT.源表中有4个BLOB列,我将转换为VARCHAR2作为MV的一部分:
CREATE MATERIALIZED VIEW Employee_MV
REFRESH FAST ON COMMIT
WITH PRIMARY KEY
AS
SELECT UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR (History, 2000, 1)), //BLOB column
<3 more blob columns with similar conversions>,
<misc columns from different tables>,
<rowid columns for tables for REFRESH FAST to work>
FROM <list of tables with JOINs>
Run Code Online (Sandbox Code Playgroud)
如果在使用BLOB列的参与表中插入行时刷新MV - 无论是通过ON COMMIT还是ON DEMAND - 它会出现以下消息错误:
ORA-12008: error in materialized view refresh path
ORA-06553: PLS-307: too many declarations of 'SUBSTR' match this call
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2545
ORA-06512: …Run Code Online (Sandbox Code Playgroud)