自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PostgreSQL vs. MySQL,該怎么選呢?

數(shù)據(jù)庫 MySQL
我們觀察到了與 Stack Overflow 結(jié)果相同的行業(yè)趨勢,即 Postgres 在開發(fā)者中變得越來越受歡迎。但根據(jù)我們的實際體驗,精密的 Postgres 犧牲了一些便利性。如果你想使用Postgres最好多看看文檔,并運行幾個查詢來上手,有一些學(xué)習(xí)成本,MySQL 會更容易一些。有時候,功能多并不意味著好,擇適合自己的才是最好的 。

今天我們就來聊聊PostgreSQL和MySQL,大象和海豚我們到底該選哪個呢?

先放一張對比表格:


PostgreSQL

MySQL

許可

MIT-style license

GNU General Public License

編程語言

C

C/C++

可視化工具

PgAdmin

MySQL Workbench

ACID支持

存儲引擎

單一存儲引擎

多種存儲引擎,例如InnoDB和MyISAM

全文搜索支持

是(有限)

刪除臨時表

在DROP TABLE語法中沒有TEMP或者TEMPORARY關(guān)鍵字

在DROP TABLE語法語句中支持TEMP或者TEMPORARY關(guān)鍵字,只允許刪除臨時表。

刪除表(DROP TABLE)

支持CASCADE刪除表的依賴對象的選項,例如表和視圖。

不支持CASCADE選項。

刪除表(TRUNCATE TABLE)

PostgreSQL TRUNCATE TABLE支持更多功能,如CASCADE、RESTART IDENTITY、CONTINUE IDENTITY、 事務(wù)安全等。

MySQL TRUNCATE TABLE 不支持CASCADE和事務(wù)安全。數(shù)據(jù)一旦刪除,就無法回滾。

自動遞增列

SERIAL

AUTO_INCREMENT

身份列

解析函數(shù)

數(shù)據(jù)類型

支持許多高級類型,例如array、hstore用戶定義的 type

SQL標(biāo)準(zhǔn)類型

無符號整數(shù)

布爾類型

使用TINYINT(1)來表示布爾類型

IP地址數(shù)據(jù)類型

設(shè)置列的默認(rèn)值

同時支持常量和函數(shù)調(diào)用

必須是常量或者TIMESTAMP或者DATETIME 列設(shè)置CURRENT_TIMESTAMP為默認(rèn)值

CTE(通用表表達(dá)式)

有(MySQL 8.0支持)

EXPLAIN輸出

更多詳情信息

較少的信息

物化視圖

檢查約束

有(MySQL 8.0.16以后支持, 之前MySQL只是忽略檢查)

表繼承

存儲過程編程語言

Ruby, Perl, Python, TCL, PL/pgSQL, SQL, JavaScript, etc.

SQL:2003存儲過程語法

FULL OUTER JOIN

INTERSECT

EXCEPT

部分索引

位圖索引

表達(dá)式索引

覆蓋索引

有(9.2版本之后)

有. MySQL支持覆蓋索引,允許僅通過掃描索引來檢索數(shù)據(jù),而無需接觸表數(shù)據(jù)。這對于具有數(shù)百萬行的大型表來說是有利的。

觸發(fā)器

支持可以在大多數(shù)類型的命令上觸發(fā)的觸發(fā)器,但影響全局?jǐn)?shù)據(jù)庫的觸發(fā)器除外,例如角色和表空間。

僅限于某些命令

分區(qū)

RANGE, LIST

RANGE、LIST、HASH、KEY 以及使用 RANGE 或 LIST 與 HASH 或 KEY 子分區(qū)組合的復(fù)合分區(qū)

任務(wù)調(diào)度

pgAgent

Scheduled event

連接可擴(kuò)展性

每個新連接都是一個操作系統(tǒng)進(jìn)程

每個新連接都是一個操作系統(tǒng)線程

看完上面的表格,我們基本上對PostgreSQL和MySQL之間的差異有了大概的了解,下面我們詳細(xì)的說明一下:

語法

就語法而言,Postgresql 和 MySQL 都很相似。以下是兩者的選擇查詢:

SELECT * FROM STUDENTS;

但是,MySQL 不支持多個子查詢,例如“LIMIT”或“ALL”。它也不支持標(biāo)準(zhǔn) SQL 子句,例如“INTERSECT”或“OUTER JOIN”。

MySQL 不像 PostgreSQL 那樣完全兼容 SQL,后者支持上述所有子查詢。如果您的業(yè)務(wù)需要經(jīng)常使用這些子查詢,那么 PostgreSQL 將是更合適的選擇。

支持的語言

PostgreSQL 和 MySQL 支持許多相同的語言,但存在一些差異。

另一方面,PostgreSQL 提供對更廣泛的編程語言的支持:

  • C/ C++
  • Delphi
  • Erlang
  • Go
  • Java
  • Javascript
  • JSON (native since version 9.2)
  • Lisp
  • .NET
  • Python
  • R
  • Tcl
  • Other programming languages

以下是 MySQL 支持的語言列表:

  • C/C++
  • Delphi
  • Erlang
  • Go
  • Java
  • Lisp
  • Node.js
  • Perl
  • PHP
  • R

速度

在決定最適合您的業(yè)務(wù)需求的數(shù)據(jù)庫時,速度是一個不可或缺的因素??焖俚臄?shù)據(jù)庫不僅可以確保您的網(wǎng)站運行得更快,而且還可以通過指出可以刪除的未使用數(shù)據(jù)來幫助減輕服務(wù)器的壓力。

PostgreSQL 和 MySQL 都因是市場上最快的 DBMS 解決方案而聞名。然而,這一類別中沒有明顯的贏家。您可以很容易地找到基于配置、測試和硬件推薦一種數(shù)據(jù)庫的基準(zhǔn)測試。一個可能在并發(fā)性方面占據(jù)上風(fēng),而另一個可能在內(nèi)存很少的單核機(jī)器上表現(xiàn)更好。

最終,這取決于您如何使用它們。眾所周知,MySQL 在只讀命令方面速度更快,但代價是并發(fā)性較高,而 PostgreSQL 在讀寫操作、海量數(shù)據(jù)集和復(fù)雜查詢方面表現(xiàn)更好。

體系結(jié)構(gòu)

MySQL 是一個純關(guān)系數(shù)據(jù)庫,而 PostgreSQL 是一個對象關(guān)系數(shù)據(jù)庫。PostgreSQL 提供更復(fù)雜的數(shù)據(jù)類型,并允許對象繼承屬性。另一方面,它也使得使用 PostgreSQL 變得更加復(fù)雜。PostgreSQL 擁有一個單一的、符合 ACID 的存儲引擎。除了默認(rèn)存儲引擎 InnoDB 之外,MySQL 還支持 15 種不同的存儲引擎。大量的存儲引擎允許您快速將它們用于其他用例。

PostgreSQL 通過內(nèi)存分配為每個建立的客戶端連接生成一個新的系統(tǒng)進(jìn)程。這需要具有許多客戶端連接的系統(tǒng)上的大量內(nèi)存。另一方面,MySQL 使用單個進(jìn)程并為每個連接維護(hù)一個線程。這使得 MySQL 成為企業(yè)范圍以下應(yīng)用程序的更合適選擇。

表現(xiàn)

PostgreSQL 的構(gòu)建是為了符合標(biāo)準(zhǔn)、功能豐富且可擴(kuò)展。此前,PostgreSQL 的性能表現(xiàn)平穩(wěn)——讀取通常比 MySQL 慢,但它可以更有效地寫入大量數(shù)據(jù)。除此之外,PostgreSQL 比 MySQL 更好地處理并發(fā)性。

在過去幾年中,他們的能力之間的差距已顯著縮小。如果您使用舊的 MyISAM 引擎,MySQL 讀取數(shù)據(jù)的速度仍然相當(dāng)快。它還進(jìn)行了優(yōu)化,以在大量數(shù)據(jù)寫入方面趕上 PostgreSQL。

在為您的目的選擇合適的工具時,性能不應(yīng)成為大多數(shù)普通應(yīng)用程序的約束因素。PostgreSQL 和 MySQL 的性能在很大程度上是相同的。

復(fù)制和集群

復(fù)制是一個允許開發(fā)人員將數(shù)據(jù)從數(shù)據(jù)庫復(fù)制到其副本數(shù)據(jù)庫的過程。這確保了每個用戶都擁有相同級別的信息。復(fù)制還帶來了各種好處,例如容錯、可擴(kuò)展性、自動備份以及在不影響主集群的情況下執(zhí)行長時間查詢的能力。

MySQL 和 PostgreSQL 都支持復(fù)制。PostgreSQL提供同步復(fù)制,這意味著它有兩個數(shù)據(jù)庫同時運行,并且主數(shù)據(jù)庫與副本數(shù)據(jù)庫同步。您甚至可以使用 PostgreSQL 執(zhí)行同步和級聯(lián)復(fù)制。然而,在 MySQL 中,復(fù)制是單向異步的。這意味著一臺數(shù)據(jù)庫服務(wù)器充當(dāng)主數(shù)據(jù)庫服務(wù)器,其他數(shù)據(jù)庫服務(wù)器充當(dāng)副本。

MySQL 和 PostgreSQL 都支持集群。集群利用共享存儲將相同的數(shù)據(jù)集復(fù)制到環(huán)境中的每個節(jié)點。這使得數(shù)據(jù)庫能夠容忍故障,因為在環(huán)境中的各個節(jié)點之間復(fù)制數(shù)據(jù)所產(chǎn)生的冗余。

數(shù)據(jù)和表結(jié)構(gòu)

JSON 支持仍然是 MySQL 納入的領(lǐng)先 NoSQL 功能之一。相比之下,PostgreSQL 支持用戶定義的類型、數(shù)組、hstore 和 XML。能夠處理更多數(shù)據(jù)類型的主要好處是功能的增加。例如,通過接受數(shù)組作為數(shù)據(jù)類型,PostgreSQL 還可以提供與這些數(shù)組兼容的主機(jī)函數(shù)。

然而,盡管使用替代格式存儲數(shù)據(jù)具有優(yōu)勢,但執(zhí)行此類數(shù)據(jù)格式可能會更加復(fù)雜,因為它們不遵循長期的基準(zhǔn)。因此,與數(shù)據(jù)庫一起使用的組件可能并不總是遵循 PostgreSQL 格式。

MySQL在SQL合規(guī)性方面僅部分兼容SQL,因為它不支持像無檢查約束這樣的所有功能。也就是說,它確實提供了很多擴(kuò)展。

相比之下,PostgreSQL 比 MySQL 更符合 SQL 規(guī)范,支持大多數(shù)主要 SQL 功能 —準(zhǔn)確地說,支持 179 個強(qiáng)制功能中的 160 個。

可擴(kuò)展性

PostgreSQL 被認(rèn)為是一種高度可擴(kuò)展的工具,因為它支持 MySQL 中找不到的各種高級數(shù)據(jù)類型。這將包括網(wǎng)絡(luò)地址類型、本機(jī) UUID、幾何/GIS、可索引的 JSON 以及時區(qū)感知時間戳。如果這沒有使 PostgreSQL 在這一輪中成為明顯的贏家,您可以添加運算符、數(shù)據(jù)類型和索引類型。

因此,如果您的應(yīng)用程序正在處理非結(jié)構(gòu)化數(shù)據(jù)或任何可用的獨特數(shù)據(jù)類型,PostgreSQL 可能是更好的選擇。但是,如果您只處理基本的數(shù)字和字符數(shù)據(jù)類型,那么這兩個數(shù)據(jù)庫都應(yīng)該可以正常工作。

索引

為了提高數(shù)據(jù)庫性能,您可以在處理大型數(shù)據(jù)表時使用索引來加速 SQL 查詢。如果沒有索引,查詢將會很慢,并且會成為 DBMS 的主要負(fù)擔(dān)。

PostgreSQL 和 MySQL 都提供不同的索引選項。PostgreSQL 索引類型包括以下幾種:

  • 部分索引僅排列表的一部分信息。
  • B樹索引和哈希索引。
  • 表達(dá)式索引,生成由表達(dá)函數(shù)而不是列值生成的索引。

另一方面,MySQL 提供以下索引選項:

  • 存儲在 R 樹上的索引,例如在空間數(shù)據(jù)類型上找到的索引。
  • 存儲在 B 樹上的索引,例如 PRIMARY KEY、INDEX、FULLTEXT 和 UNIQUE。
  • 使用 FULLTEXT 索引時的倒排列表和哈希索引。

安全

PostgreSQL和MySQL都支持組和用戶管理,并為各種角色授予SQL權(quán)限。MySQL 支持本機(jī)窗口服務(wù)、PAM 和 LDAP 進(jìn)行用戶身份驗證,而 PostgreSQL 支持使用 Kerberos 和 PAM 的基于 IP 的客戶端身份驗證和過濾。因此,這兩個數(shù)據(jù)庫在安全性方面不相上下。

支持與社區(qū)

PostgreSQL 和 MySQL 都有有用的社區(qū)來為用戶提供支持。

PostgreSQL 擁有龐大的志愿者社區(qū),他們通過郵件列表和 IRC 向用戶提供免費建議。除此之外,您甚至可以通過第三方提供商購買付費支持。您甚至可以通過瀏覽市場上各種有用的 PostgreSQL 書籍和手冊來排除故障。

MySQL 也有一個龐大的志愿者社區(qū),他們會花時間為您提供免費建議和支持。您可以在 Percona 和 MySQL 網(wǎng)站上利用此類支持。除了免費社區(qū)支持之外,Oracle 還為其所有產(chǎn)品的商業(yè)版本提供 24/7 付費支持。與 PostgreSQL 一樣,您也可以通過深入研究大量免費且有用的 MySQL 指南、書籍和教程來進(jìn)行故障排除。

總而言之,對 PostgreSQL 的支持可能有點具有挑戰(zhàn)性,因為它需要更多的技術(shù)專業(yè)知識來設(shè)置和使用。此外,目前可供您使用的 PostgreSQL 專家數(shù)量少于 MySQL 專家數(shù)量。所以,在用戶支持和管理方便性方面,MySQL略勝一籌。

總結(jié)

總的來說,Postgres 有更多功能、更繁榮的社區(qū)和生態(tài);而 MySQL 則更易學(xué)習(xí)并且擁有龐大的用戶群體。

我們觀察到了與 Stack Overflow 結(jié)果相同的行業(yè)趨勢,即 Postgres 在開發(fā)者中變得越來越受歡迎。但根據(jù)我們的實際體驗,精密的 Postgres 犧牲了一些便利性。如果你想使用Postgres最好多看看文檔,并運行幾個查詢來上手,有一些學(xué)習(xí)成本,MySQL 會更容易一些。有時候,功能多并不意味著好,擇適合自己的才是最好的 。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2019-09-19 08:00:00

Visual StudVisual Stud編程語言

2024-09-12 22:45:47

2023-09-06 14:11:03

數(shù)據(jù)庫Redis消息隊列

2024-11-06 16:07:39

2025-04-22 09:17:41

2021-01-13 16:04:07

網(wǎng)絡(luò)On-Prem托管

2012-12-11 10:24:21

開放式封閉式云端

2024-01-25 18:00:56

微服務(wù)系統(tǒng)KafkaRabbitMQ

2014-09-28 10:29:43

喬布斯施密特Android

2021-12-23 15:36:21

NASSANDAS

2020-08-25 09:14:17

對象存儲文件存儲塊存儲

2023-05-22 19:49:30

命令Linux

2025-02-18 16:00:00

代碼Python架構(gòu)

2019-04-02 15:07:51

API NginxZuul

2024-10-30 13:48:23

2024-09-26 16:34:06

2020-04-15 10:21:43

云計算AWSAzure

2020-03-27 14:45:23

PyCharmSublime工具

2021-01-18 18:30:49

服務(wù)器開發(fā)工具

2022-08-04 14:54:50

APTDNFYUM
點贊
收藏

51CTO技術(shù)棧公眾號