Ati*_*gur 4 index oracle materialized-view
我有一个相当复杂的查询。我写了两个不同的查询来实现我的目标。第一个是使用 WITH,另一个是使用全局临时表。
第一:
WITH A
(
KNO
..
)
, B
(
KNO
...
)
, C
(
KNO
...
)
SELECT * from
A INNER JOIN B
on A.KNO = B.KNO
INNER JOIN C
on B.KNO = C.KNO
Run Code Online (Sandbox Code Playgroud)
第二个:
Truncate Table tempA;
Truncate Table tempB;
Truncate Table tempC;
INSERT INTO tempA SELECT -- Same select which constructs WITH A
INSERT INTO tempB SELECT -- Same select which constructs WITH B
INSERT INTO tempC SELECT -- Same select which constructs WITH C
SELECT * from
tempA A INNER JOIN tempB B
on A.KNO = B.KNO
INNER JOIN tempC C
on B.KNO = C.KNO
Run Code Online (Sandbox Code Playgroud)
他们是相提并论的。我的意思是我对他们两个都观察到相同的查询时间。但是当我将 KNO 索引添加到 tempA、tempB、tempC 临时表时。第二个暴涨。
我的意思是:它变得更快,很多。我查询了 1 年的值。使用 WITH:约 58 分钟。使用带有 INDEX 的临时表:大约 30 分钟。
下面给出了 4 个月值的查询时间。
使用 WITH
DENEME@DENEME Finished 15:37:02 15:40:38 03:36 mins Select 500 WITH A
Run Code Online (Sandbox Code Playgroud)
总计:216000 毫秒
使用临时表 + 索引
DENEME@DENEME Finished 15:41:54 15:41:55 1 sec Select 500 WITH D
DENEME@DENEME Finished 15:41:38 15:41:38 665 msecs Insert 34660 INSERT INTO C
DENEME@DENEME Finished 15:41:21 15:41:35 14 secs Insert 34660 INSERT INTO B
DENEME@DENEME Finished 15:41:17 15:41:17 109 msecs Insert 1804 INSERT INTO A
DENEME@DENEME Finished 15:41:12 15:41:12 33 msecs Unknown 0 TRUNCATE TABLE C
DENEME@DENEME Finished 15:41:12 15:41:12 39 msecs Unknown 0 TRUNCATE TABLE B
DENEME@DENEME Finished 15:41:11 15:41:11 203 msecs Unknown 0 TRUNCATE TABLE A
Run Code Online (Sandbox Code Playgroud)
总计:16049 毫秒
我的问题是:
我可以提示 oracle 在构造 WITH 临时表时添加索引吗?
归档时间: |
|
查看次数: |
16301 次 |
最近记录: |