1. 程式人生 > 實用技巧 >pg 與 mysql 的區別

pg 與 mysql 的區別

sql 語句

create database test;
drop database test;

int    4位元組
float  4位元組
double 8位元組

char    定長位元組
varchar 不定長位元組

create table if not exists `test_tb`(
	`id` int unsigned auto_increment,
	`title` varchar(100) not null,
	`author` varchar(100),
	`date` DATE,
	primary key(`id`)
)engine=InnoDB default charset=utf8;

事務

mysql 事務、

原子性:一個事務中的所有操作,要麼全部完成,要麼全部都不完成,
		中間過程發生錯誤,則回退到最原始的狀態
一致性:在事務開始之前和事務結束以後,資料庫的完整性沒有被破環
隔離性:資料庫執行多個併發事務同時對其資料進行讀寫和修改的能力,
		隔離性可以防止多個事務併發執行時由於交叉執行而導致的資料不一直,
永續性:事務處理結束後,對資料的修改是永久性的,即便系統故障也不會丟失

pg 與 mysql 的區別

都是免費、開源、強大、且功能豐富的資料庫
一.PostgreSQL相對於MySQL的優勢
    1、在SQL的標準實現上要比MySQL完善,而且功能實現比較嚴謹;
    2、儲存過程的功能支援要比MySQL好,具備本地快取執行計劃的能力;
    3、對錶連線支援較完整,優化器的功能較完整,支援的索引型別很多,複雜查詢能力較強;
    4、PG主表採用堆表存放,MySQL採用索引組織表,能夠支援比MySQL更大的資料量。
    5、PG的主備複製屬於物理複製,相對於MySQL基於binlog的邏輯複製,資料的一致性更加可靠,
        複製效能更高,對主機效能的影響也更小。
    6、MySQL的儲存引擎外掛化機制,存在鎖機制複雜影響併發的問題,而PG不存在。

二、MySQL相對於PG的優勢:
    1、innodb的基於回滾段實現的MVCC機制,相對PG新老資料一起存放的基於XID的MVCC機制,是佔優的。
       新老資料一起存放,需要定時觸 發VACUUM,會帶來多餘的IO和資料庫物件加鎖開銷,引起資料庫整體的併發能力下降。
       而且VACUUM清理不及時,還可能會引發資料膨脹;
    2、MySQL採用索引組織表,這種儲存方式非常適合基於主鍵匹配的查詢、刪改操作,但是對錶結構設計存在約束;
    3、MySQL的優化器較簡單,系統表、運算子、資料型別的實現都很精簡,非常適合簡單的查詢操作;
    4、MySQL分割槽表的實現要優於PG的基於繼承表的分割槽實現,主要體現在分割槽個數達到上千上萬後的處理效能差異較大。
    5、MySQL的儲存引擎外掛化機制,使得它的應用場景更加廣泛,比如除了innodb適合事務處理場景外,myisam適合靜態資料的查詢場景。

三、總結
    開源資料庫都不是很完善,商業資料庫oracle在架構和功能方面都還是完善很多的。
    從應用場景來說,PG更加適合嚴格的企業應用場景(比如金融、電信、ERP、CRM),
    而MySQL更加適合業務邏輯相對簡單、資料可靠性要求較低的網際網路場景(比如google、facebook、alibaba)。

其他地址

http://www.qdmandarin.com/