達夢資料庫 查詢優化器的執行計畫介紹

2021-10-10 10:10:04 字數 1639 閱讀 3140

查詢優化器的執行計畫介紹

執行計畫是sql語句的執行方式,由查詢優化器為語句設計的執行方式,交給執行器去執行。在sql命令列使用explain可以列印出語句的執行計畫。

例如:建表和建索引語句:

create

table t1(c1 int

,c2 char);

create

table t2(d1 int

,d2 char);

create

index idx_t1_c1 on t1(c1)

;insert

into t1 values(1

,'a');

insert

into t1 values(2

,'b');

insert

into t1 values(3

,'c');

insert

into t1 values(4

,'d');

insert

into t2 values(1

,'a');

insert

into t2 values(2

,'b');

insert

into t2 values(5

,'c');

insert

into t2 values(6

,'d'

);

列印執行計畫:

explain

select a.c1+

1,b.d2 from t1 a, t2 b where a.c1 = b.d1;

執行計畫如下:

1

#nset2: [0, 16, 9]

2#prjt2: [0, 16, 9]; exp_num(2), is_atom(false)

3#nest loop index join2: [0, 16, 9]

4#cscn2: [0, 4, 5]; index33555535(b)

5#ssek2: [0, 4, 0]; scan_type(asc), idx_t1_c1 (a), scan_range[t2.d1,t2.d1]

這個執行計畫看起來就像一棵樹,執行過程為:控制流從上向下傳遞,資料流從下向上傳遞。其中,類似[0, 16, 9]這樣的三個數字,分別表示估算的操作符代價、處理的記錄行數和每行記錄的位元組數。同一層次中的操作符,如本例中的cscn2和ssek2,由父節點nest loop index join2控制它們的執行順序。

該計畫的大致執行流程如下:

cscn2: 掃瞄t2表的聚集索引,資料傳遞給父節點索引連線;

nest loop index join2: 當左孩子有資料返回時取右側資料;

ssek2: 利用t2表當前的d1值作為二級索引idx_t1_c1定位查詢的key,返回結果給父節點;

nest loop index join2: 如果右孩子有資料則將結果傳遞給父節點prjt2,否則繼續取左孩子的下一條記錄;

prjt2: 進行表示式計算c1+1, d2;

nset2: 輸出最後結果;

重複過程1) ~ 4)直至左側cscn2資料全部取完。

達夢資料庫查詢多表聯查

小結 select 列名列表 from 表 1,表 2 where 兩表關聯列條件表示式 select 列名列表 from 表 1 inner join on 兩表關聯列條件表示式 外連線可分為 左連線 右連線 完全外連線。左外連線 左外連線包含left join左表所有行,如果左表中某行在右表沒有...

達夢資料庫和mysql索引引擎 達夢資料庫 索引

1.索引的種類和功能 聚集索引 每乙個普通表有且只有乙個聚集索引 唯一索引 索引資料根據索引鍵唯一 函式索引 包含函式 表示式的預先計算的值 位圖索引 對低基數的列建立位圖索引 位圖連線索引 針對兩個或者多個表連線的點陣圖索引,主要用於資料倉儲中 全文索引 在表的文字列上而建的索引。2.何時使用索引...

達夢資料庫操作

1.安裝 dminstall.bin i接下來是一些設定,比如 語言 key檔案的位置 時區 安裝型別 安裝目錄 略過 2.初始化 進入你剛才設定的安裝目錄的bin目錄下執行 dminit這是我自己的設定 input system dir home dmdba dmdata input db nam...