目前SQL Server 和 Oracle 及 MySQL是互聯網領域當中最常用的三大數據庫。那么這三大數據庫之間到底有哪些區別呢?中培偉業《SQL Server2012數據庫管理與性能調優》培訓專家姜老師進行了詳細介紹。
姜老師表示,三者是目前市場占有率最高的關系數據庫,而且很有代表性。
從歷史來看, Oracle成立于1977年,由于其誕生早、結構嚴謹、高可用、高性能等特點,使其在傳統數據庫應用中大殺四方,金融、通信、能源、運輸、零售、制造等各個行業的大型公司基本都是用了Oracle,早些年的時候,世界500強幾乎100%都是Oracle的用戶。
MySQL的最初的核心思想,主要是開源、簡便易用。其開發可追溯至1985年,而第一個內部發行版本誕生,已經是1995年。到1998年,MySQL已經可以支持10中操作系統了,其中就包括win平臺。
由于MySQL的早期定位,其主要應用場景就是互聯網開發。基本上,互聯網的爆發成就了MySQL,LAMP架構風靡天下。而由于MySQL更多的的追求輕量、易用,以及早期的事物操作及復雜查詢優化的缺失,在傳統的數據庫應用場景中,份額極少。
一提到SQL Server,大家一般都只想到Microsoft SQL Server,而非Sybase SQL Server。SQL Server最初是由Microsoft, Sybase and Ashton-Tate三家公司攔下的生意,是為IBM(又出現了)公司的OS/2操作系統開發的。隨著OS/2項目的失敗,大家也分道揚鑣。 Microsoft自然轉向自己的win操作系統,作為windows NT軟件方案的一部分。而Sybase則專注于Linux/Unix方向的數據庫開發。
MS SQL Server主要面向中小企業。其最大的優勢就是在于集成了MS公司的各類產品及資源,提供了強大的可視化界面、高度集成的管理開發工具,在快速構建商業智能(BI)方面頗有建樹。 MS SQL Server是MS公司在軟件集成方案中的重要一環,也為WIN系統在企業級應用中的普及做出了很大貢獻。
在應用場景方面,Oracle。Oracle的應用,主要在傳統行業的數據化業務中,比如:銀行、金融這樣的對可用性、健壯性、安全性、實時性要求極高的業務;零售、物流這樣對海量數據存儲分析要求很高的業務。此外,高新制造業如芯片廠也基本都離不開Oracle;電商也有很多使用者,如京東(正在投奔Oracle)、阿里巴巴(計劃去Oracle化)。而且由于Oracle對復雜計算、統計分析的強大支持,在互聯網數據分析、數據挖掘方面的應用也越來越多。
MySQL基本是生于互聯網,長于互聯網。其應用實例也大都集中于互聯網方向,MySQL的高并發存取能力并不比大型數據庫差,同時價格便宜,安裝使用簡便快捷,深受廣大互聯網公司的喜愛。并且由于MySQL的開源特性,針對一些對數據庫有特別要求的應用,可以通過修改代碼來實現定向優化,例如SNS、LBS等互聯網業務。
MS SQL Server。windows生態系統的產品,好處壞處都很分明。好處就是,高度集成化,微軟也提供了整套的軟件方案,基本上一套win系統裝下來就齊活了。因此,不那么缺錢,但很缺IT人才的中小企業,會偏愛 MS SQL Server 。例如,自建ERP系統、商業智能、垂直領域零售商、餐飲、事業單位等等。
1996年,Bill Gates親自出手,從Borland挖來了大牛Anders,搞定了C#語言。微軟02年搞定了http://ASP.NET。成熟的.NET、Silverlight技術,為 MS SQL Server贏得了部分互聯網市場,其中就有曾經的全球最大社交網站MySpace,其發展歷程很有代表性,可作為一個比較特別的例子。其巔峰時有超過1.5億的注冊用戶及每月400億的訪問量。應該算是MS SQL Server支撐的最大的數據應用了。
架構。其實要說執行的區別,主要還是架構的區別。正是架構導致了相同SQL在執行過程中的解釋、優化、效率的差異。
Oracle 數據文件包括:控制文件、數據文件、重做日志文件、參數文件、歸檔文件、密碼文件。這是根據文件功能行進行劃分,并且所有文件都是二進制編碼后的文件,對數據庫算法效率有極大的提高。由于Oracle文件管理的統一性,就可以對SQL執行過程中的解析和優化,指定統一的標準。
MySQL最大的一個特色,就是自由選擇存儲引擎。每個表都是一個文件,都可以選擇合適的存儲引擎。常見的引擎有 InnoDB、 MyISAM、 NDBCluster等。但由于這種開放插件式的存儲引擎,比如要求數據庫與引擎之間的松耦合關系。從而導致文件的一致性大大降低。在SQL執行優化方面,也就有著一些不可避免的瓶頸。在多表關聯、子查詢優化、統計函數等方面是軟肋,而且只支持極簡單的HINT。
SQL Server 數據架構基本是縱向劃分,分為:Protocol Layer(協議層), Relational Engine(關系引擎), Storage Engine(存儲引擎), SQLOS。SQL執行過程就是逐層解析的過程,其中Relational Engine中的優化器,是基于成本的(CBO),其工作過程跟Oracle是非常相似的。