W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
數(shù)據(jù)庫(kù)中的查詢(xún)改寫(xiě)(Query Rewrite)是指將一個(gè) SQL 改寫(xiě)成另外一個(gè)更加容易優(yōu)化的 SQL。
OceanBase 數(shù)據(jù)庫(kù)所支持的查詢(xún)改寫(xiě)規(guī)則分為基于規(guī)則的查詢(xún)改寫(xiě)和基于代價(jià)的查詢(xún)改寫(xiě)。
基于規(guī)則的查詢(xún)改寫(xiě)總是會(huì)把 SQL 往“好”的方向進(jìn)行改寫(xiě),從而增加該 SQL 的優(yōu)化空間。一個(gè)典型的基于規(guī)則的改寫(xiě)是把子查詢(xún)改寫(xiě)成聯(lián)接。如果不改寫(xiě),子查詢(xún)的執(zhí)行方式只能是 Nested Loop Join,改寫(xiě)之后,優(yōu)化器就也可以考慮 Hash Join 和 Merge Join 的執(zhí)行方式。
基于代價(jià)的查詢(xún)改寫(xiě)并不能總是把 SQL 往“好”的方向進(jìn)行改寫(xiě),需要使用代價(jià)模型來(lái)判斷。一個(gè)典型的基于代價(jià)的改寫(xiě)就是 Or-Expansion。
在數(shù)據(jù)庫(kù)中,一個(gè)改寫(xiě)規(guī)則通常需要滿足特定的條件才能夠?qū)崿F(xiàn),而且很多規(guī)則的改寫(xiě)可以互相作用(一個(gè)規(guī)則的改寫(xiě)會(huì)觸發(fā)另外一個(gè)規(guī)則的改寫(xiě))。OceanBase 數(shù)據(jù)庫(kù)把所有基于規(guī)則的查詢(xún)改寫(xiě)分成若干個(gè)規(guī)則集合。對(duì)于每個(gè)規(guī)則集合,OceanBase 數(shù)據(jù)庫(kù)采用迭代的方式進(jìn)行改寫(xiě),一直到 SQL 不能被改寫(xiě)為止或者迭代次數(shù)達(dá)到預(yù)先設(shè)定的閾值。類(lèi)似地,對(duì)于基于代價(jià)的改寫(xiě)規(guī)則也是采用這種方式處理。
這里需要注意的是,基于代價(jià)的改寫(xiě)之后可能又會(huì)重新觸發(fā)基于規(guī)則的改寫(xiě),所以整體上的基于代價(jià)的改寫(xiě)和基于規(guī)則的改寫(xiě)也會(huì)采用這種迭代的方式進(jìn)行改寫(xiě)。
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)系方式:
更多建議: