SQL Server 和 Oracle 以及 MySQL 有哪些區別



        SQL,在這裏我理解成SQL Server。三者是目前市場佔有率最高(依安裝量而非收入)的關係數據庫,並且頗有表明性。排行第四的DB2(屬IBM公司),與Oracle的定位和架構很是類似,就不贅述了。算法

  1. 若是要說明三者的區別,首先就要從歷史入手。
    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的爆發實際是在0一、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系統在企業級應用中的普及作出了很大貢獻。
  2. 典型應用場景
    關於「大型數據庫」,並無嚴格的界定,有說以數據量爲準,有說以恢復時間爲準。若是綜合數據庫應用場景來講,大型數據庫應用有如下特色:海量數據、高吞吐量;複雜邏輯、高計算量,以及高可用性。從這點上來講,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年搞定了http://ASP.NET。成熟的.NET、Silverlight技術,爲 MS SQL Server贏得了部分互聯網市場,其中就有曾經的全球最大社交網站MySpace,其發展歷程頗有表明性,可做爲一個比較特別的例子【3】。其巔峯時有超過1.5億的註冊用戶及每個月400億的訪問量。應該算是MS SQL Server支撐的最大的數據應用了。
  3. 架構。其實要說執行的區別,主要仍是架構的區別。正是架構致使了相同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,包括:鏈接提示、查詢提示、表提示。
  4. 簡單的說,同類的軟件,不一樣的品牌。各有所長,適用範圍不一樣。
    像電信,金融,氣象 行業,數據量超大,計算量和周邊要求較高的,使用Oracle,就像Linux環境,比較麻煩 ,須要前提條件多,安全性相對高。
    像中個企業,須要快速應用,快速解決問題,花費適中,考慮MSSQL。
    互聯網使用Mysql的多,由於免費,可定製性強。最重要緣由是互聯網公司初始創業的時候沒有錢買Oralce,鄙視MSSQL,選擇MYSQL方便又簡單。最終作大了,老的代碼不能改,就一直用下去了。sql

    MYSQL只是組件沒Oracle那麼多而已,性能上面差點。可是,能夠作到「知足要求」。因此如今用的多。數據庫

    簡單的說,同類的軟件,不一樣的品牌。各有所長,適用範圍不一樣。
    像電信,金融,氣象 行業,數據量超大,計算量和周邊要求較高的,使用Oracle,就像Linux環境,比較麻煩 ,須要前提條件多,安全性相對高。
    像中個企業,須要快速應用,快速解決問題,花費適中,考慮MSSQL。
    互聯網使用Mysql的多,由於免費,可定製性強。最重要緣由是互聯網公司初始創業的時候沒有錢買Oralce,鄙視MSSQL,選擇MYSQL方便又簡單。最終作大了,老的代碼不能改,就一直用下去了。windows

    MYSQL只是組件沒Oracle那麼多而已,性能上面差點。可是,能夠作到「知足要求」。因此如今用的多。緩存

    做者:晨鐘暮鼓
    連接:https://www.zhihu.com/question/19866767/answer/125814040
    來源:知乎
    著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。安全

    Oracle與Mysql的區別:
    Oracle:客戶端與命令窗口都是由用戶決定的;是大型數據庫,市場佔有率達40%;價格很是高,佔據特別大的內存空間和其餘機器性能,安裝完後又3G左右
    Mysql:客戶端與命令窗口都是由數據庫決定的;是中小型數據庫,市場佔有率是20%,開源且免費的,安裝完後152M
    操做上的區別:
    一、組函數用法規則:
    MySQL中組函數在select語句中能夠隨意使用,但在Oracle中若是查詢語句中有組函數,那其餘列名必須是組函數處理過的,或者是group by子句中的列不然報錯服務器

    二、自動增加的數據類型處理:
    MySQL有自動增加的數據類型,插入記錄時不用操做此字段,會自動得到數據值。Oracle沒有自動增加的數據類型,須要創建一個自動增加的序列號,插入記錄時要把序列號的下一個值賦於此字段。
    三、單引號的處理:
    mySql用雙引號包起字符串,Oracle裏用單引號包起字符串,在插入和修改字符串前必須作單引號的替換:把全部出現的一個單引號替換成兩個單引號。
    四、翻頁的SQL語句的處理:
    語句一:
    SELECT ID, [FIELD_NAME,...] FROM TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID FROM TABLE_NAME WHERE 條件1 ORDER BY 條件2) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 條件3;架構

    語句二:
    SELECT * FROM (( SELECT ROWNUM AS NUMROW, c.* from (SELECT [FIELD_NAME,...] FROM TABLE_NAME WHERE 條件1 ORDER BY 條件2) c) WHERE NUMROW > 80 AND NUMROW < 100 ) ORDER BY 條件3;
    五、長字符串的處理:
    插入修改記錄前必定要作進行非空和長度判斷,不能爲空的字段值和超出長度字段值都應該提出警告
    六、主鍵
    MySQL通常使用自動增加類型,在建立表時只要指定表的主鍵爲auto increment,插入記錄時,不須要再指定該記錄的主鍵值,MySQL將自動增加;Oracle沒有自動增加類型,主鍵通常使用的序列,插入記錄時將序列號的下一個值付給該字段便可;只是ORM框架是隻要是native主鍵生成策略便可。
    七、字符串的模糊比較
    mySql裏字段名like%'字符串'%,用字符串比較函數instr(字段名,'字符串')>0會獲得更精確的查找結果。
    八、空字符的處理
    MySQL的非空字段也有空的內容,Oracle裏定義了非空字段就不允許有空的內容。按MySQL的NOT NULL來定義Oracle表結構,導數據的時候會產生錯誤。所以導數據時要對空字符進行判斷,若是爲NULL或空字符,須要把它改爲一個空格的字符串。併發

相關文章
相關標籤/搜索