溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

postgresql和mysql數(shù)據(jù)庫(kù)有什么區(qū)別

發(fā)布時(shí)間:2020-08-01 11:54:53 來(lái)源:億速云 閱讀:465 作者:清晨 欄目:編程語(yǔ)言

不懂postgresql和mysql數(shù)據(jù)庫(kù)有什么區(qū)別?其實(shí)想解決這個(gè)問(wèn)題也不難,下面讓小編帶著大家一起學(xué)習(xí)怎么去解決,希望大家閱讀完這篇文章后大所收獲。

一、PostgreSQL相對(duì)于MySQL的優(yōu)勢(shì)

1、在SQL的標(biāo)準(zhǔn)實(shí)現(xiàn)上要比MySQL完善,而且功能實(shí)現(xiàn)比較嚴(yán)謹(jǐn);

2、存儲(chǔ)過(guò)程的功能支持要比MySQL好,具備本地緩存執(zhí)行計(jì)劃的能力;

3、對(duì)表連接支持較完整,優(yōu)化器的功能較完整,支持的索引類(lèi)型很多,復(fù)雜查詢(xún)能力較強(qiáng);

4、PG主表采用堆表存放,MySQL采用索引組織表,能夠支持比MySQL更大的數(shù)據(jù)量。

5、PG的主備復(fù)制屬于物理復(fù)制,相對(duì)于MySQL基于binlog的邏輯復(fù)制,數(shù)據(jù)的一致性更加可靠,復(fù)制性能更高,對(duì)主機(jī)性能的影響也更小。

6、MySQL的存儲(chǔ)引擎插件化機(jī)制,存在鎖機(jī)制復(fù)雜影響并發(fā)的問(wèn)題,而PG不存在。

二、MySQL相對(duì)于PG的優(yōu)勢(shì)

1、innodb的基于回滾段實(shí)現(xiàn)的MVCC機(jī)制,相對(duì)PG新老數(shù)據(jù)一起存放的基于XID的MVCC機(jī)制,是占優(yōu)的。新老數(shù)據(jù)一起存放,需要定時(shí)觸 發(fā)VACUUM,會(huì)帶來(lái)多余的IO和數(shù)據(jù)庫(kù)對(duì)象加鎖開(kāi)銷(xiāo),引起數(shù)據(jù)庫(kù)整體的并發(fā)能力下降。而且VACUUM清理不及時(shí),還可能會(huì)引發(fā)數(shù)據(jù)膨脹;

2、MySQL采用索引組織表,這種存儲(chǔ)方式非常適合基于主鍵匹配的查詢(xún)、刪改操作,但是對(duì)表結(jié)構(gòu)設(shè)計(jì)存在約束;

3、MySQL的優(yōu)化器較簡(jiǎn)單,系統(tǒng)表、運(yùn)算符、數(shù)據(jù)類(lèi)型的實(shí)現(xiàn)都很精簡(jiǎn),非常適合簡(jiǎn)單的查詢(xún)操作;

4、MySQL分區(qū)表的實(shí)現(xiàn)要優(yōu)于PG的基于繼承表的分區(qū)實(shí)現(xiàn),主要體現(xiàn)在分區(qū)個(gè)數(shù)達(dá)到上千上萬(wàn)后的處理性能差異較大。

5、MySQL的存儲(chǔ)引擎插件化機(jī)制,使得它的應(yīng)用場(chǎng)景更加廣泛,比如除了innodb適合事務(wù)處理場(chǎng)景外,myisam適合靜態(tài)數(shù)據(jù)的查詢(xún)場(chǎng)景。

三、用法區(qū)別

1、MySQL的各種text字段有不同的限制,需要手動(dòng)區(qū)分small text,middle text, large text;pg沒(méi)有該限制,可以支持text的各種大小。

2、按照SQL標(biāo)準(zhǔn),null判斷只能用is null,不能用 ==null;pg可以設(shè)置transform_null_equals 把 = null 翻譯成 is null。

3、MySQL的事務(wù)隔離級(jí)別 repeatable read 并不能阻止常見(jiàn)的并發(fā)更新,得加鎖才可以。但悲觀鎖會(huì)影響性能,手動(dòng)實(shí)現(xiàn)樂(lè)觀鎖又復(fù)雜。而 Pg 的列里有隱藏的樂(lè)觀鎖 version 字段,默認(rèn)的 repeatable read 級(jí)別就能保證并發(fā)更新的正確性,并且又有樂(lè)觀鎖的性能。附帶一個(gè)各數(shù)據(jù)庫(kù)對(duì)隔離級(jí)別的行為差異比較調(diào)查。

4、MySQL 不支持多個(gè)表從同一個(gè)序列中取 id,而 Pg 可以。

5、MySQL 不支持 OVER 子句,而 Pg 支持。OVER 子句能簡(jiǎn)單的解決“每組取 top 5” 的這類(lèi)問(wèn)題。幾乎任何數(shù)據(jù)庫(kù)的子查詢(xún) (subquery) 性能都比 MySQL 好。

6、pg它可以存儲(chǔ) array 和 json,可以在 array 和 json 上建索引,甚至還能用表達(dá)式索引。為了實(shí)現(xiàn)文檔數(shù)據(jù)庫(kù)的功能,設(shè)計(jì)了 jsonb 的存儲(chǔ)結(jié)構(gòu)。有人會(huì)說(shuō)為什么不用 Mongodb 的 BSON 呢?Pg 的開(kāi)發(fā)團(tuán)隊(duì)曾經(jīng)考慮過(guò),但是他們看到 BSON 把 [“a”,“b”,“c”] 存成 {0: “a”,1:“b”,2:“c”} 的時(shí)候就決定要重新做一個(gè) jsonb 了,現(xiàn)在 jsonb 的性能已經(jīng)優(yōu)于 BSON。

總體上來(lái)說(shuō),開(kāi)源數(shù)據(jù)庫(kù)都不是很完善,商業(yè)數(shù)據(jù)庫(kù)oracle在架構(gòu)和功能方面都還是完善很多的。從應(yīng)用場(chǎng)景來(lái)說(shuō),PG更加適合嚴(yán)格的企業(yè)應(yīng)用場(chǎng)景(比如金融、電信、ERP、CRM),而MySQL更加適合業(yè)務(wù)邏輯相對(duì)簡(jiǎn)單、數(shù)據(jù)可靠性要求較低的互聯(lián)網(wǎng)場(chǎng)景(比如google、facebook、alibaba)。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享postgresql和mysql數(shù)據(jù)庫(kù)有什么區(qū)別內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問(wèn)題就找億速云,詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI