1. 程式人生 > >mysql/sqlserver/oracle

mysql/sqlserver/oracle

子查詢優化 pro actions 遷移 extern 例如 磁盤陣列 操作 res

1. ORACLE
oracle 能在所有主流平臺上運行(包括 windows)。完全支持所有的工業標準。采用完全開放策略。可以使客戶選擇最適合的解決方案。對開發商全力支 持.oracle並行服務器通過使一組結點共享同一簇中的工作來擴展windownt的能力,提供高可用性和高伸縮性的簇的解決方案。如果 windowsNT不能滿足需要,用戶可以把數據庫移到UNIX中。Oracle的並行服務器對各種UNIX平臺的集群機制都有著相當高的集成度。 oracle獲得最高認證級別的ISO標準認證.oracle性能最高, 保持開放平臺下的TPC-D和TPC-C的世界記錄oracle多層次網絡計 算,支持多種工業標準,可以用ODBC、JDBC、OCI等網絡客戶連接。
Oracle 在兼容性、可移植性、可聯結性、高生產率上、開放性也存在優點。Oracle產品采用標準SQL,並經過美國國家標準技術所(NIST)測試。與 IBM SQL/DS,DB2,INGRES,IDMS/R等兼容。 Oracle的產品可運行於很寬範圍的硬件與操作系統平臺上。可以安裝在70種以上 不同的大、中、小型機上;可在VMS、DOS、UNIX、WINDOWS等多種操作系統下工作。能與多種通訊網絡相連,支持各種協議(TCP/IP、 DECnet、LU6.2等)。提供了多種開發工具,能極大的方便用戶進行進一步的開發。Oracle良好的兼容性、可移植性、可連接性和高生產率是 Oracle RDBMS具有良好的開放性。

Oracle價格是比較昂貴的。據說一套正版的oracle軟件早在2006年年底的時候在市場上的價格已經達到了6位數。所以如果你的項目不是那種超級大的項目,還是放棄Oracle吧。


2. SQLSERVER
SQL Server 是 Microsoft推出一套產品,它具有使用方便、可伸縮性好、與相關軟件集成程度高等優點,逐漸成為Windows平臺下進行數據庫應用開發較為理想的 選擇之一。SQLServer是目前流行的數據庫之一,它已廣泛應用於金融,保險,電力,行政管理等與數據庫有關的行業.而且,由於其易操作性及友好的界 面,贏得了廣大用戶的青睞,尤其是SQLServer與其它數據庫,如Access,FoxPro,Excel等有良好的ODBC接口,可以把上述數據庫 轉成SQLServer的數據庫,因此目前越來越多的讀者正在使用SQLServer.

Sqlserver由於是微軟的產品,又有著如此強大的功能,所以他的影響力是幾種數據庫系統中比較大,用戶也是比較多的。它一般是和同是微軟產品 的.net平臺一起搭配使用。當然其他的各種開發平臺,都提供了與它相關的數據庫連接方式。因此,開發軟件用sqlserver做數據庫是一個正確的選 擇。


3. MYSQL
MySQL不支持事務處理,沒有視圖,沒有存儲過程和觸發器,沒有數據庫端的用戶自定義函數,不能完全使用標準的SQL語法。
從 數據庫行家聽說的第一件事就是MySQL缺乏transactions,rollbacks, 和subselects的功能。如果你計劃使用MySQL 寫一個關於銀行、會計的應用程序,或者計劃維護一些隨時需要線性遞增的不同類的計數器,你將缺乏transactions功能。在現有的發布版本的 MySQL下,請不要有任何的這些想法。(請註意,MySQL的測試版3.23.x系列現在已經支持transactions了)。
  在非常必要的情況下,MySQL的局限性可以通過一部分開發者的努力得到克服。在MySQL中你失去的主要功能是subselect語句,而這正是其它的所有數據庫都具有的。換而言之,這個失去的功能是一個痛苦。
MySQL沒法處理復雜的關聯性數據庫功能,例如,子查詢(subqueries),雖然大多數的子查詢都可以改寫成join
另 一個MySQL沒有提供支持的功能是事務處理(transaction)以及事務的提交(commit)/撤銷(rollback)。一個事務指的是被當 作一個單位來共同執行的一群或一套命令。如果一個事務沒法完成,那麽整個事務裏面沒有一個指令是真正執行下去的。對於必須處理線上訂單的商業網站來 說,MySQL沒有支持這項功能,的確讓人覺得很失望。但是可以用MaxSQL,一個分開的服務器,它能通過外掛的表格來支持事務功能。 
外 鍵(foreignkey)以及參考完整性限制(referentialintegrity)可以讓你制定表格中資料間的約束,然後將約束 (constraint)加到你所規定的資料裏面。這些MYSQL沒有的功能表示一個有賴復雜的資料關系的應用程序並不適合使用MySQL。當我們說 MySQL不支持外鍵時,我們指的就是數據庫的參考完整性限制--MySQL並沒有支持外鍵的規則,當然更沒有支持連鎖刪除 (cascadingdelete)的功能。簡短的說,如果你的工作需要使用復雜的資料關聯,那你還是用原來的Access吧。 
你在MySQL中也不會找到存儲進程(storedprocedure)以及觸發器(trigger)。(針對這些功能,在Access提供了相對的事件進程(eventprocedure)。

***********************************************************************************

作者:孫文亮
鏈接:https://www.zhihu.com/question/19866767/answer/14942009
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

  • 如果要說明三者的區別,首先就要從歷史入手。
  1. Oracle:中文譯作甲骨文,這是一家傳奇的公司,有一個傳奇的大老板Larry Ellision。 Ellision 32歲還一事無成,讀了三個大學,沒得到一個學位文憑,換了十幾家公司,老婆也離他而去。開始創業時只有1200美元,卻使得Oracle公司連續12年銷售額每年翻一番。
    Oracle成立於1977年,早期的理論基礎,反而來自於一篇IBM的論文《A Relational Model of Data for Large Shared Data Banks》【1】。作者CODD選取了關系代數的五種運算,並基於運算,架構了一種新型的數據存儲模型。基於這種模型,Oracle成為了一個非常典型的關系數據庫。因此也變的嚴謹、安全、高速、穩定,並且變的越來越龐大。
    由於其誕生早、結構嚴謹、高可用、高性能等特點,使其在傳統數據庫應用中大殺四方,金融、通信、能源、運輸、零售、制造等各個行業的大型公司基本都是用了Oracle,早些年的時候,世界500強幾乎100%都是Oracle的用戶。
  2. MySQL :MySQL的最初的核心思想,主要是開源、簡便易用。其開發可追溯至1985年,而第一個內部發行版本誕生,已經是1995年。到1998年,MySQL已經可以支持10中操作系統了,其中就包括win平臺。但依然問題多多,如不支持事務操作、子查詢 、外鍵、存儲過程和視圖等功能。下圖是一個截止至2006年的數據庫市場占有率【2】:
    技術分享圖中可以看出,MySQL的爆發實際是在01、02年,尤其是02年發布的4.0 Beta版,正式選定InnoDB作為默認引擎,對事務處理能力及數據緩存能力有了極大的提高。同年4.1版開始支持子查詢,至此MySQL終於蛻變成一個成熟的關系型數據庫系統。05年的5.0版本又添加了存儲過程、服務端遊標、觸發器、查詢優化以及分布式事務功能,但同年被Oracle抄了後路,InnoDB被Oracle收編。08年,MySQL被Sun收購,09年,Oracle收購了Sun和MySQL。
    由於MySQL的早期定位,其主要應用場景就是互聯網開發。基本上,互聯網的爆發成就了MySQL,LAMP架構風靡天下。而由於MySQL更多的的追求輕量、易用,以及早期的事物操作及復雜查詢優化的缺失,在傳統的數據庫應用場景中,份額極少。
  3. SQL Server:一提到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,DB2就是比較典型的大型數據庫,Sybase SQL Server也算是吧。下面分別說明之前三種數據庫的應用場景。
  1. Oracle。Oracle的應用,主要在傳統行業的數據化業務中,比如:銀行、金融這樣的對可用性、健壯性、安全性、實時性要求極高的業務;零售、物流這樣對海量數據存儲分析要求很高的業務。此外,高新制造業如芯片廠也基本都離不開Oracle;電商也有很多使用者,如京東(正在投奔Oracle)、阿裏巴巴(計劃去Oracle化)。而且由於Oracle對復雜計算、統計分析的強大支持,在互聯網數據分析、數據挖掘方面的應用也越來越多。一個典型場景是這樣的:
    某電信公司(非國內)下屬某分公司的數據中心,有4臺Oracle Sun的大型服務器用來安裝Solaris操作系統和Oracle並提供計算服務,3臺Sun Storage磁盤陣列來提供Oracle數據存儲,12臺IBM小型機,一臺Oracle Exadata服務器,一臺500T的磁帶機用來存儲歷史數據,San連接內網,使用Tuxedo中間件來保證擴展性和無損遷移。建立支持高並發的Oracle數據庫,通過OLTP系統用來對海量數據實時處理、操作,建立高運算量的Oracle數據倉庫,用OLAP系統用來分析營收數據及提供自動報表。總預算約750萬美金。
  2. MySQL。MySQL基本是生於互聯網,長於互聯網。其應用實例也大都集中於互聯網方向,MySQL的高並發存取能力並不比大型數據庫差,同時價格便宜,安裝使用簡便快捷,深受廣大互聯網公司的喜愛。並且由於MySQL的開源特性,針對一些對數據庫有特別要求的應用,可以通過修改代碼來實現定向優化,例如SNS、LBS等互聯網業務。一個典型的應用場景是:
    某互聯網公司,成立之初,僅有PC數臺,通過LAMP架構迅速搭起網站框架。隨著業務擴張、市場擴大,迅速發展成為6臺Dell小型機的中型網站。現在花了三年,終於成為垂直領域的最大網站,計劃中的數據中心,擁有Dell機架式服務器40臺,總預算20萬美金。
  3. MS SQL Server。windows生態系統的產品,好處壞處都很分明。好處就是,高度集成化,微軟也提供了整套的軟件方案,基本上一套win系統裝下來就齊活了。因此,不那麽缺錢,但很缺IT人才的中小企業,會偏愛 MS SQL Server 。例如,自建ERP系統、商業智能、垂直領域零售商、餐飲、事業單位等等。
    1996年,Bill Gates親自出手,從Borland挖來了大牛Anders,搞定了C#語言。微軟02年搞定了。成熟的.NET、Silverlight技術,為 MS SQL Server贏得了部分互聯網市場,其中就有曾經的全球最大社交網站MySpace,其發展歷程很有代表性,可作為一個比較特別的例子【3】。其巔峰時有超過1.5億的註冊用戶及每月400億的訪問量。應該算是MS SQL Server支撐的最大的數據應用了。
  • 架構。其實要說執行的區別,主要還是架構的區別。正是架構導致了相同SQL在執行過程中的解釋、優化、效率的差異。這裏只做粗略說明,就不細說了:
  1. Oracle: 數據文件包括:控制文件、數據文件、重做日誌文件、參數文件、歸檔文件、密碼文件。這是根據文件功能行進行劃分,並且所有文件都是二進制編碼後的文件,對數據庫算法效率有極大的提高。由於Oracle文件管理的統一性,就可以對SQL執行過程中的解析和優化,指定統一的標準:
    RBO(基於規則的優化器)、CBO(基於成本的優化器)
    通過優化器的選擇,以及無敵的HINT規則,給與了SQL優化極大的自由,對CPU、內存、IO資源進行方方面面的優化。
  2. MySQL:最大的一個特色,就是自由選擇存儲引擎。每個表都是一個文件,都可以選擇合適的存儲引擎。常見的引擎有 InnoDB、 MyISAM、 NDBCluster等。但由於這種開放插件式的存儲引擎,比如要求數據庫與引擎之間的松耦合關系。從而導致文件的一致性大大降低。在SQL執行優化方面,也就有著一些不可避免的瓶頸。在多表關聯、子查詢優化、統計函數等方面是軟肋,而且只支持極簡單的HINT。
  3. SQL Server :數據架構基本是縱向劃分,分為:Protocol Layer(協議層), Relational Engine(關系引擎), Storage Engine(存儲引擎), SQLOS。SQL執行過程就是逐層解析的過程,其中Relational Engine中的優化器,是基於成本的(CBO),其工作過程跟Oracle是非常相似的。在成本之上也是支持很豐富的HINT,包括:連接提示、查詢提示、表提示。

mysql/sqlserver/oracle