首頁/ 汽車/ 正文

告訴你開源資料庫PostgreSQL比mysql強在哪裡

本文將告訴你PostgreSQL有哪些強大的功能你需要了解的:

主鍵沒有預設排序

如果您以前使用過 MySQL,那麼您應該熟悉任何表的主鍵預設情況下都是聚集鍵的事實。資料使用索引在磁碟上進行物理排序,這就是為什麼在 MySQL 中查詢主鍵時,資料

order by

在查詢中沒有進行排序。

MySQL

讓我們透過執行下面的查詢透過一些實驗來測試我們的理論:

—— Create table E1CREATE TABLE E1 ( empId INTEGER, name TEXT NOT NULL, dept TEXT NOT NULL);—— Insert sample valuesINSERT INTO E1 VALUES (0001, ‘John’, ‘Sales’);INSERT INTO E1 VALUES (0003, ‘Ava’, ‘Sales’);INSERT INTO E1 VALUES (0002, ‘Dave’, ‘Accounting’);—— Select without Order BySELECT * FROM E1;

告訴你開源資料庫PostgreSQL比mysql強在哪裡

現在,讓我們建立一個主鍵:

—— Add Primary key。 This is clustered by defaultALTER TABLE E1 ADD PRIMARY KEY (empID);

告訴你開源資料庫PostgreSQL比mysql強在哪裡

如您所見,我們的查詢中沒有包含

order by

子句,但 MySQL 仍然以相同的順序返回行。

PostgreSQL

讓我們在 中執行相同的查詢集

PostgreSQL

,僅在具有主鍵的表上:

—— Similar code to MySQL。 Create table and insert sample values。—— Primary key is added in the Create itself。CREATE TABLE E1 ( empId INTEGER PRIMARY KEY, name TEXT NOT NULL, dept TEXT NOT NULL);INSERT INTO E1 VALUES (0001, ‘John’, ‘Sales’);INSERT INTO E1 VALUES (0003, ‘Ava’, ‘Sales’);INSERT INTO E1 VALUES (0002, ‘Dave’, ‘Accounting’);

如果我們執行類似

SELECT *

(見下文)的查詢,PostgreSQL 將不會對資料進行排序

empId

- 我們必須包含一個

ORDER BY

子句。

告訴你開源資料庫PostgreSQL比mysql強在哪裡

告訴你開源資料庫PostgreSQL比mysql強在哪裡

聚簇鍵各有優缺點,但 PostgreSQL 中沒有預設的聚簇鍵。不過,如果需要,PostgreSQL 可以讓您選擇進行叢集。

ACID 合規性差異

PostgreSQL 具有預設的 ACID 合規性設定,這些設定在本質上非常不同且更嚴格。其中一些如下:

髒讀

預設情況下,PostgreSQL 具有更嚴格的 ACID 合規性。例如,MySQL 具有允許髒讀發生的隔離級別(未提交讀),而在 PostgreSQL 中,沒有允許髒讀的版本/級別。

可序列化

為了實現可序列化的隔離級別(最強級別),PostgreSQL 使用了一種叫做基於記憶體的MVCC的東西。這要快得多,並且通常不需要顯式鎖來實現可序列化級別。相比之下,MySQL 是透過細粒度鎖實現的。在大多數情況下,沒有效能差異,但有人認為基於記憶體的 MVCC 稍好一些,並且可以防止主表膨脹。

連線成本高昂

PostgreSQL 遵循基於程序的併發,因此不鼓勵開啟和關閉連線。許多其他資料庫系統也是如此,但在 PostgreSQL 中更是如此。因此,建議使用一個連線池來維持連線更長時間,然後應用程式可以透過這個連線池開啟和關閉連線。

PostgreSQL 不是單一模型資料庫

PostgreSQL 的使用者還應該注意,PostgreSQL 不是單一模型資料庫。它將其他資料庫模式/型別無縫整合到操作的關係模型中。

這些資料型別也有自己獨特的索引型別,可以更快地訪問。與具有不同引擎的 MySQL 不同,PostgreSQL 使用相同的引擎工作,只有資料型別和索引型別不同。

資料庫與架構

在 PostgreSQL 中,一個數據庫與其他資料庫完全分離。在 PostgreSQL 叢集中只保留一個數據庫是一種很好的做法。如果需要對錶進行邏輯分組,那麼這就是模式的用武之地。

PostgreSQL 資料庫與其他資料庫嚴格分開。資料庫連線始終開啟到叢集中的一個數據庫。即使在同一個叢集中,該連線也不能用於連線其他資料庫。

叢集資源在同一叢集中的不同資料庫之間平等共享。

模式可以在不同的資料庫連線之間重用,並表示表的邏輯集合。

資料備份和恢復通常在資料庫級別進行,所有模式都是自包含的。

理解這些要點很重要,尤其是對於來自 MySQL 等資料庫的人來說,這些術語是顛倒的。

方言差異

出於多種原因,每個資料庫都有自己的 SQL 方言。PostgreSQL 有自己的方言,非常接近 ANSI SQL 標準。SQL 詞彙表在此處的文件中列出。

如果我們進一步將 PostgreSQL 與 MySQL 和其他資料庫管理系統進行比較,我們會注意到還有一些更細微的差異,包括但不限於:

PostgreSQL 中的真空與 MySQL 中的清除。

PostgreSQL 中的程序與 MySQL 中的執行緒。(MySQL 使用執行緒)

PostgreSQL 中存在但 MySQL 中不存在的表繼承。

還有更多。重要的是要了解您選擇使用的任何功能將如何影響整個資料庫基礎架構,因為資料庫管理系統已針對各種用例開發。但是,避免僅僅為了比較而比較特性——這些資料庫管理系統已經存在了很長時間,新特性的新增非常頻繁,而且路線圖也在迅速變化。

就 PostgreSQL 而言,請記住,雖然它有自己的缺點,但它被認為是當今可用的最先進的開源資料庫管理系統之一。

相關文章

頂部