偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

PostgreSQL vs. MySQL,該怎么選呢?

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

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

先放一張對(duì)比表格:


PostgreSQL

MySQL

許可

MIT-style license

GNU General Public License

編程語言

C

C/C++

可視化工具

PgAdmin

MySQL Workbench

ACID支持

存儲(chǔ)引擎

單一存儲(chǔ)引擎

多種存儲(chǔ)引擎,例如InnoDB和MyISAM

全文搜索支持

是(有限)

刪除臨時(shí)表

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

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

刪除表(DROP TABLE)

支持CASCADE刪除表的依賴對(duì)象的選項(xiàng),例如表和視圖。

不支持CASCADE選項(xiàng)。

刪除表(TRUNCATE TABLE)

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

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

自動(dòng)遞增列

SERIAL

AUTO_INCREMENT

身份列

解析函數(shù)

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

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

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

無符號(hào)整數(shù)

布爾類型

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

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

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

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

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

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

有(MySQL 8.0支持)

EXPLAIN輸出

更多詳情信息

較少的信息

物化視圖

檢查約束

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

表繼承

存儲(chǔ)過程編程語言

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

SQL:2003存儲(chǔ)過程語法

FULL OUTER JOIN

INTERSECT

EXCEPT

部分索引

位圖索引

表達(dá)式索引

覆蓋索引

有(9.2版本之后)

有. MySQL支持覆蓋索引,允許僅通過掃描索引來檢索數(shù)據(jù),而無需接觸表數(shù)據(jù)。這對(duì)于具有數(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ò)展性

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

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

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

語法

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

SELECT * FROM STUDENTS;

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

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

支持的語言

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

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

  • 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í),速度是一個(gè)不可或缺的因素??焖俚臄?shù)據(jù)庫不僅可以確保您的網(wǎng)站運(yùn)行得更快,而且還可以通過指出可以刪除的未使用數(shù)據(jù)來幫助減輕服務(wù)器的壓力。

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

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

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

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

PostgreSQL 通過內(nèi)存分配為每個(gè)建立的客戶端連接生成一個(gè)新的系統(tǒng)進(jìn)程。這需要具有許多客戶端連接的系統(tǒng)上的大量內(nèi)存。另一方面,MySQL 使用單個(gè)進(jìn)程并為每個(gè)連接維護(hù)一個(gè)線程。這使得 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。

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

復(fù)制和集群

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

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

MySQL 和 PostgreSQL 都支持集群。集群利用共享存儲(chǔ)將相同的數(shù)據(jù)集復(fù)制到環(huán)境中的每個(gè)節(jié)點(diǎn)。這使得數(shù)據(jù)庫能夠容忍故障,因?yàn)樵诃h(huán)境中的各個(gè)節(jié)點(diǎn)之間復(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ù)。

然而,盡管使用替代格式存儲(chǔ)數(shù)據(jù)具有優(yōu)勢,但執(zhí)行此類數(shù)據(jù)格式可能會(huì)更加復(fù)雜,因?yàn)樗鼈儾蛔裱L期的基準(zhǔn)。因此,與數(shù)據(jù)庫一起使用的組件可能并不總是遵循 PostgreSQL 格式。

MySQL在SQL合規(guī)性方面僅部分兼容SQL,因?yàn)樗恢С窒駸o檢查約束這樣的所有功能。也就是說,它確實(shí)提供了很多擴(kuò)展。

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

可擴(kuò)展性

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

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

索引

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

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

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

另一方面,MySQL 提供以下索引選項(xiàng):

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

安全

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

支持與社區(qū)

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

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

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

總而言之,對(duì) PostgreSQL 的支持可能有點(diǎn)具有挑戰(zhàn)性,因?yàn)樗枰嗟募夹g(shù)專業(yè)知識(shí)來設(shè)置和使用。此外,目前可供您使用的 PostgreSQL 專家數(shù)量少于 MySQL 專家數(shù)量。所以,在用戶支持和管理方便性方面,MySQL略勝一籌。

總結(jié)

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

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

責(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消息隊(duì)列

2021-01-13 16:04:07

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

2024-11-06 16:07:39

2025-04-22 09:17:41

2012-12-11 10:24:21

開放式封閉式云端

2023-05-22 19:49:30

命令Linux

2020-08-25 09:14:17

對(duì)象存儲(chǔ)文件存儲(chǔ)塊存儲(chǔ)

2024-01-25 18:00:56

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

2014-09-28 10:29:43

喬布斯施密特Android

2021-12-23 15:36:21

NASSANDAS

2019-04-02 15:07:51

API NginxZuul

2025-02-18 16:00:00

代碼Python架構(gòu)

2024-09-26 16:34:06

2024-10-30 13:48:23

2020-04-15 10:21:43

云計(jì)算AWSAzure

2015-03-19 11:03:49

Linuxwin10

2022-08-04 14:54:50

APTDNFYUM

2020-03-27 14:45:23

PyCharmSublime工具
點(diǎn)贊
收藏

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