W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
MATERIAL 算子用于物化下層算子輸出的數(shù)據(jù)。
OceanBase 數(shù)據(jù)庫(kù)以流式數(shù)據(jù)執(zhí)行計(jì)劃,但有時(shí)算子需要等待下層算子輸出所有數(shù)據(jù)后才能夠開(kāi)始執(zhí)行,所以需要在下方添加一個(gè) MATERIAL 算子物化所有的數(shù)據(jù)?;蛘咴谧佑?jì)劃需要重復(fù)執(zhí)行的時(shí)候,使用 MATERIAL 算子可以避免重復(fù)執(zhí)行。
如下示例中,t1 表與 t2 表執(zhí)行 NESTED LOOP JOIN 運(yùn)算時(shí),右表需要重復(fù)掃描,可以在右表有一個(gè) MATERIAL 算子,保存 t2 表的所有數(shù)據(jù)。
obclient>CREATE TABLE t1(c1 INT, c2 INT, c3 INT);
Query OK, 0 rows affected (0.12 sec)
obclient>CREATE TABLE t2(c1 INT ,c2 INT ,c3 INT);
Query OK, 0 rows affected (0.12 sec)
obclient>EXPLAIN SELECT /*+ORDERED USE_NL(T2)*/* FROM t1,t2
WHERE t1.c1=t2.c1\G;
*************************** 1. row ***************************
Query Plan:
===========================================
|ID|OPERATOR |NAME|EST. ROWS|COST |
-------------------------------------------
|0 |NESTED-LOOP JOIN| |2970 |277377|
|1 | TABLE SCAN |t1 |3 |37 |
|2 | MATERIAL | |100000 |176342|
|3 | TABLE SCAN |t2 |100000 |70683 |
===========================================
Outputs & filters:
-------------------------------------
0 - output([t1.c1], [t1.c2], [t1.c3], [t2.c1], [t2.c2], [t2.c3]), filter(nil),
conds([t1.c1 = t2.c1]), nl_params_(nil)
1 - output([t1.c1], [t1.c2], [t1.c3]), filter(nil),
access([t1.c1], [t1.c2], [t1.c3]), partitions(p0)
2 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil)
3 - output([t2.c1], [t2.c2], [t2.c3]), filter(nil),
access([t2.c1], [t2.c2], [t2.c3]), partitions(p0)
上述示例中,執(zhí)行計(jì)劃展示中 2 號(hào)算子 MATERIAL 的功能是保存 t2 表的數(shù)據(jù),以避免每次聯(lián)接都從磁盤掃描 t2 表的數(shù)據(jù)。執(zhí)行計(jì)劃展示中的 outputs & filters 詳細(xì)展示了 MATERIAL 算子的輸出信息如下:
信息名稱 |
含義 |
---|---|
output |
該算子輸出的表達(dá)式。 其中 rownum() 表示 ROWNUM 對(duì)應(yīng)的表達(dá)式。 |
filter |
該算子上的過(guò)濾條件。 由于示例中 MATERIAL 算子沒(méi)有設(shè)置 filter,所以為 nil。 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: