最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

解密openGauss數(shù)據(jù)庫中的函數(shù)依賴關(guān)系

2022-10-18 14:21 作者:Gauss松鼠會(huì)  | 我要投稿

生活中總是存在著錯(cuò)綜復(fù)雜的聯(lián)系,例如喜歡打籃球的人,身高普遍比較高;喜歡穿艷麗色衣服的人,性格會(huì)普遍比較開朗;在超市買炸雞的人,會(huì)大概率買啤酒。而反過來,這種聯(lián)系并不一定成立。

在數(shù)據(jù)庫領(lǐng)域,表中的不同屬性就像生活中不同的事物,也會(huì)存在著各種類似的關(guān)聯(lián)關(guān)系。如何利用這種關(guān)聯(lián)關(guān)系來提升數(shù)據(jù)庫查詢性能?這篇文章可以解密openGauss的一種應(yīng)用方案,該特性可通過GUC參數(shù)enable_functional_dependency進(jìn)行控制。

1、函數(shù)依賴的用途

函數(shù)依賴特性就是用一個(gè)介于0~1的值來量化這種關(guān)聯(lián)關(guān)系的強(qiáng)弱程度,這個(gè)數(shù)值又被稱為函數(shù)依賴度,其中0表示沒有關(guān)聯(lián),1表示完全關(guān)聯(lián)。函數(shù)依賴,是多列統(tǒng)計(jì)信息的一種,可以描述兩個(gè)屬性之間的關(guān)聯(lián)關(guān)系的強(qiáng)弱,也可以用于描述多個(gè)屬性與另一個(gè)屬性的關(guān)聯(lián)關(guān)系的強(qiáng)弱,其主要用途是提高選擇率計(jì)算的準(zhǔn)確性。其中選擇率的定義為:

選擇率是對SQL查詢結(jié)果規(guī)模的預(yù)期,取值0~1。如果選擇率比較大,即接近于1,那么查詢優(yōu)化器會(huì)傾向于使用順序掃描,如果選擇率比較小,即接近于0,查詢優(yōu)化器會(huì)傾向于使用索引掃描,如果介于兩者之間,查詢優(yōu)化器傾向于使用位圖掃描。所以選擇率能否估算準(zhǔn)確,會(huì)直接影響到執(zhí)行計(jì)劃的選擇,進(jìn)而影響到數(shù)據(jù)庫的查詢效率。函數(shù)依賴特性的加入,能一定程度上提高選擇率估算的準(zhǔn)確性。

在引用函數(shù)依賴特性之前,數(shù)據(jù)庫會(huì)使用條件獨(dú)立假設(shè)的方法來估算選擇率。舉一個(gè)生活中的例子,在一個(gè)班級中,男女生的比例是1:1,喜歡籃球的人數(shù)占比為20%,身高175cm以上的人數(shù)占比為50%。我們可以說喜歡籃球且身高在175cm以上的男生的占比為50% * 20% * 50% = 5%嗎?顯然這個(gè)計(jì)算結(jié)果會(huì)比實(shí)際結(jié)果低,因?yàn)檫@幾個(gè)屬性之間有關(guān)聯(lián)關(guān)系,喜歡籃球的人普遍身高偏高,喜歡籃球的人中男生占多數(shù),男生的身高較女生普遍偏高。

2、理論推導(dǎo)

下面我們從理論上來對比,條件獨(dú)立假設(shè)和函數(shù)依賴在計(jì)算選擇率時(shí)的差異。假設(shè)一個(gè)表 t(a int, b int, c int),A是只與屬性{a}相關(guān)的等式約束條件,B是只與屬性相關(guān)的等式約束條件。在條件獨(dú)立假設(shè)下,同時(shí)滿足約束條件A和約束條件B的選擇率的計(jì)算公式為:

s(A,B) = s(A)* s(B)

這會(huì)導(dǎo)致選擇率一定程度的低估,因?yàn)榧s束條件A和約束條件B會(huì)存在或強(qiáng)或弱關(guān)聯(lián),而這里并沒有考慮在內(nèi)。引入函數(shù)依賴特性,并應(yīng)用函數(shù)依賴關(guān)系a=>b:fa→b來計(jì)算選擇率s(A, B)的理論公式為:

s(A,B) = fa→b?* s(A) + (1 — fa→b) * s(A) * s(B)

其中,fa→b為一個(gè)實(shí)數(shù),取值0~1。類似地,對于含有三個(gè)屬性的函數(shù)依賴關(guān)系"a , b=> c:fa,b—>c?",計(jì)算選擇率s(A, B, C)的理論公式為:

s(A,B,C)= fa,b→c?* s(A,B) + (1 — fa,b→c) * s(A,B) * s(C)

但是在實(shí)際應(yīng)用中,考慮到最終的選擇率不能大于任何一個(gè)屬性列的選擇率,需要對上述的理論公式做一個(gè)輕微變形,用min(s(A), s(B))來代替第一項(xiàng)的s(A),min(s(A, B), s(C))來代替第一項(xiàng)的s(A, B)。這種變形會(huì)對計(jì)算不滿足函數(shù)依賴的數(shù)值的選擇率,產(chǎn)生一定的修正作用。

s(A,B) =??fa→b?* min(s(A), s(B)) +?(1 — fa→b) * s(A) * s(B)

s(A,B,C)=?fa,b→c?* min(s(A, B), s(C)) +?(1 — fa,b→c) * s(A,B) * s(C)

3、應(yīng)用示例

上面我們已經(jīng)對openGauss數(shù)據(jù)庫中的函數(shù)依賴關(guān)系進(jìn)行了理論上的介紹,下面我們看看在具體實(shí)踐中,應(yīng)該如何操作。下面的幾個(gè)例子,可以很好地展現(xiàn)openGauss數(shù)據(jù)庫的該特性。


--優(yōu)化SQL查詢的行數(shù)估計(jì)模型前

create table t5 (a int, b int, c int, d int, e int);

insert into t5 select 1, 1, 1, 1, 1 from generate_series(1,100) i;

insert into t5 select 2, 2, 2, 2, 2 from generate_series(1,100000) i;

insert into t5 select 3, 3, 3, 3, 3 from generate_series(1,10000) i;

insert into t5 select 4, 4, 4, 4, 4 from generate_series(1,10000) i;

analyze t5;

--執(zhí)行explain analyze select * from t5 where b=1 and c=1;并查看計(jì)劃。真實(shí)行數(shù)為100,估算行數(shù)為1,行數(shù)估計(jì)準(zhǔn)確率較低,為0.01。

圖片

--執(zhí)行explain analyze select * from t5 where b=2 and c=2;并查看計(jì)劃。真實(shí)行數(shù)為100000,估算行數(shù)為83396,行數(shù)估計(jì)準(zhǔn)確率略低,為0.834。

圖片

--執(zhí)行explain analyze select * from t5 where b=3 and c=3;?并查看計(jì)劃。真實(shí)行數(shù)為10000,估算行數(shù)為832,行數(shù)估計(jì)準(zhǔn)確率較低,為0.083。

圖片

--設(shè)置ANALYZE的采樣方式為百分比采樣,采樣率為2%

set default_statistics_target=-2;

--開啟GUC參數(shù),生成函數(shù)依賴統(tǒng)計(jì)信息

set enable_functional_dependency=on;

alter table t5 add statistics ((a, b, c));

analyze?t5((a, b, c));

--執(zhí)行explain analyze select * from t5 where b=1 and c=1;?并查看計(jì)劃。真實(shí)行數(shù)為100,估算行數(shù)為72,所以行數(shù)估計(jì)準(zhǔn)確率為0.72。應(yīng)用函數(shù)依賴統(tǒng)計(jì)信息,準(zhǔn)確率從0.01提升為0.72,提升72倍。

圖片


--執(zhí)行explain analyze select * from t5 where b=2 and c=2;?并查看計(jì)劃。真實(shí)行數(shù)為100000,估算行數(shù)為99708,所以行數(shù)估計(jì)準(zhǔn)確率為0.997。應(yīng)用函數(shù)依賴統(tǒng)計(jì)信息,準(zhǔn)確率從0.834提升為0.997,提升1.19倍。

圖片

--執(zhí)行explain analyze select * from t5 where b=3 and c=3;?并查看計(jì)劃。真實(shí)行數(shù)為10000,估算行數(shù)為10066,所以行數(shù)估計(jì)準(zhǔn)確率為0.993。應(yīng)用函數(shù)依賴統(tǒng)計(jì)信息,準(zhǔn)確率從0.083提升為0.993,提升11.96倍。

圖片

通過在openGauss中使用函數(shù)依賴關(guān)系的數(shù)據(jù)庫優(yōu)化技術(shù),我們可以看到數(shù)據(jù)庫的查詢優(yōu)化性能得到了顯著的提升。如果大家對該特性感興趣,歡迎通過點(diǎn)擊下方“閱讀原文”下載最新的openGauss數(shù)據(jù)庫進(jìn)行體驗(yàn)!

解密openGauss數(shù)據(jù)庫中的函數(shù)依賴關(guān)系的評論 (共 條)

分享到微博請遵守國家法律
金平| 宁明县| 瑞金市| 洛浦县| 镇赉县| 承德市| 龙州县| 上饶市| 禄劝| 金塔县| 尚义县| 镇远县| 纳雍县| 长乐市| 和政县| 法库县| 梨树县| 明星| 什邡市| 厦门市| 广宗县| 攀枝花市| 汉寿县| 普安县| 睢宁县| 南雄市| 青浦区| 松滋市| 泰兴市| 五大连池市| 星座| 无锡市| 乌拉特后旗| 余江县| 高唐县| 聊城市| 陈巴尔虎旗| 怀远县| 中阳县| 永善县| 余江县|