W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
TABLE SCAN 算子是存儲層和 SQL 層的接口,用于展示優(yōu)化器選擇哪個索引來訪問數(shù)據(jù)。
在 OceanBase 數(shù)據(jù)庫中,對于普通索引,索引的回表邏輯是封裝在 TABLE SCAN 算子中的;而對于全局索引,索引的回表邏輯由 TABLE LOOKUP 算子完成。
示例:含 TABLE SCAN 算子的執(zhí)行計劃
obclient>CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT, c3 INT, c4 INT,
INDEX k1(c2,c3));
Query OK, 0 rows affected (0.09 sec)
Q1:
obclient>EXPLAIN EXTENDED SELECT * FROM t1 WHERE c1 = 1\G;
*************************** 1. row ***************************
Query Plan:
| ==================================
|ID|OPERATOR |NAME|EST. ROWS|COST|
----------------------------------
|0 |TABLE GET|t1 |1 |53 |
==================================
Outputs & filters:
-------------------------------------
0 - output([t1.c1(0x7f22fbe69340)], [t1.c2(0x7f22fbe695c0)], [t1.c3(0x7f22fbe69840)], [t1.c4(0x7f22fbe69ac0)]), filter(nil),
access([t1.c1(0x7f22fbe69340)], [t1.c2(0x7f22fbe695c0)], [t1.c3(0x7f22fbe69840)], [t1.c4(0x7f22fbe69ac0)]), partitions(p0),
is_index_back=false,
range_key([t1.c1(0x7f22fbe69340)]), range[1 ; 1],
range_cond([t1.c1(0x7f22fbe69340) = 1(0x7f22fbe68cf0)])
Q2:
obclient>EXPLAIN EXTENDED SELECT * FROM t1 WHERE c2 < 1 AND c3 < 1 AND
c4 < 1\G;
*************************** 1. row ***************************
Query Plan:
| ======================================
|ID|OPERATOR |NAME |EST. ROWS|COST |
--------------------------------------
|0 |TABLE SCAN|t1(k1)|100 |12422|
======================================
Outputs & filters:
-------------------------------------
0 - output([t1.c1(0x7f22fbd1e220)], [t1.c2(0x7f227decec40)], [t1.c3(0x7f227decf9b0)], [t1.c4(0x7f22fbd1dfa0)]), filter([t1.c3(0x7f227decf9b0) < 1(0x7f227decf360)], [t1.c4(0x7f22fbd1dfa0) < 1(0x7f22fbd1d950)]),
access([t1.c2(0x7f227decec40)], [t1.c3(0x7f227decf9b0)], [t1.c4(0x7f22fbd1dfa0)], [t1.c1(0x7f22fbd1e220)]), partitions(p0),
is_index_back=true, filter_before_indexback[true,false],
range_key([t1.c2(0x7f227decec40)], [t1.c3(0x7f227decf9b0)], [t1.c1(0x7f22fbd1e220)]),
range(NULL,MAX,MAX ; 1,MIN,MIN),
range_cond([t1.c2(0x7f227decec40) < 1(0x7f227dece5f0)])
上述示例中,執(zhí)行計劃展示中的 outputs & filters 詳細展示了 TABLE SCAN 算子的輸出信息如下:
信息名稱 |
含義 |
---|---|
operator |
TABLE SCAN 算子的 operator 有兩種形式:TABLE SCAN 和 TABLE GET。
|
name |
選擇用哪個索引來訪問數(shù)據(jù)。選擇的索引的名字會跟在表名后面,如果沒有索引的名字,則說明執(zhí)行的是主表掃描。 這里需要注意,在 OceanBase 數(shù)據(jù)庫中,主表和索引的組織結(jié)構(gòu)是一樣的,主表本身也是一個索引。 |
output |
該算子的輸出列。 |
filter |
該算子的過濾謂詞。 由于示例中 TABLE SCAN 算子沒有設(shè)置 filter,所以為 nil。 |
partitions |
查詢需要掃描的分區(qū)。 |
is_index_back |
該算子是否需要回表。 例如,在 Q1 查詢中,因為選擇了主表,所以不需要回表。在 Q2 查詢中,索引列是 |
filter_before_indexback |
與每個 filter 對應,表明該 filter 是可以直接在索引上進行計算,還是需要索引回表之后才能計算。 例如,在 Q2 查詢中,filter |
range_key/range/range_cond |
|
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: