hibernate中dialect的講解

RDBMS方言sql

DB2 org.hibernate.dialect.DB2Dialect
DB2 AS/400 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.DB2390Dialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLDialect
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 9i/10g org.hibernate.dialect.Oracle9Dialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Informix org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Ingres org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.ProgressDialect
Mckoi SQL org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
Firebird

org.hibernate.dialect.FirebirdDialect數據庫

 

2、MySQL:InnoDB和MyISAM的差異緩存

      

(注:MySQLInnoDBDialect與MySQLMyISAMDialect繼承自MySQLDialect。)安全

 

      InnoDB和MyISAM是MySQL最重要的兩種數據存儲引擎,二者均可用來存儲表和索引,各有優缺點,視具體應用而定。基本的差異爲:MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,可是不提供事務支持,而InnoDB提供事務支持以及外部鍵等高級數據庫功能。服務器

 

 

 

       InnoDB 給 MySQL 提供了具備事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)、多版本併發控制(multi-versioned concurrency control)的事務安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行級鎖(locking on row level),提供與 Oracle 相似的不加鎖讀取(non-locking read in SELECTs)。InnoDB鎖定在行級而且也在SELECT語句提供一個Oracle風格一致的非鎖定讀。另外InnoDB是爲處理巨大數據量時的最大性能設計。它的CPU效率多是任何其它基於磁盤的關係數據庫引擎所不能匹敵的。MySQLInnoDBDialect基於上也就有InnoDB相同的功能.併發

     

      InnoDB存儲引擎被徹底與MySQL服務器整合,InnoDB存儲引擎爲在主內存中緩存數據和索引而維持它本身的緩衝池。 InnoDB存儲它的表&索引在一個表空間中,表空間能夠包含數個文件(或原始磁盤分區)。這與MyISAM表不一樣,好比在MyISAM表中每一個表被存在分離的文件中。InnoDB 表能夠是任何尺寸,即便在文件尺寸被限制爲2GB的操做系統上。工具

     

     InnoDB是事務安全的.它與BDB類型具備相同的特性,它們還支持外鍵.InnoDB表格速度很快.具備比BDB還豐富的特性,所以若是須要一個事務安全的存儲引擎,建議使用它.若是你的數據執行大量的INSERT或UPDATE,出於性能方面的考慮,應該使用InnoDB表。性能

 

       在 http://www.innodb.com/ 上能夠找到 InnoDB 最新的信息。InnoDB 手冊的最新版本老是被放置在那裏,而且在那裏能夠獲得 InnoDB 的商業許可(order commercial licenses)以及支持。大數據

 

       MyISAM是MySQL默認存儲引擎。每一個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。.frm文件存儲表定義。數據文件的擴展名爲.MYD (MYData)。索引文件的擴展名是.MYI (MYIndex)。spa

 

       MyISAM基於傳統的ISAM類型,ISAM是Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫,它是存儲記錄和文件的標準方法.與其餘存儲引擎比較,MyISAM具備檢查和修復表格的大多數工具. MyISAM表格能夠被壓縮,並且它們支持全文搜索.它們不是事務安全的,並且也不支持外鍵。若是事物回滾將形成不徹底回滾,不具備原子性。若是執行大量的SELECT,MyISAM是更好的選擇。

      MyIASM是IASM表的新版本,有以下擴展:   ·二進制層次的可移植性。   ·NULL列索引。   ·對變長行比ISAM表有更少的碎片。   ·支持大文件。   ·更好的索引壓縮。   ·更好的鍵碼統計分佈。   ·更好和更快的auto_increment處理。

 

     下面是已知的二者之間的差異,僅供參考。

 

      1.InnoDB不支持FULLTEXT類型的索引。

 

  2.InnoDB 中不保存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,可是MyISAM只要簡單的讀出保存好的行數便可。注意的是,當count(*)語句包含 where條件時,兩種表的操做是同樣的。

 

  3.對於AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,可是在MyISAM表中,能夠和其餘字段一塊兒創建聯合索引。

 

  4.DELETE FROM table時,InnoDB不會從新創建表,而是一行一行的刪除。

 

  5.LOAD TABLE FROM MASTER操做對InnoDB是不起做用的,解決方法是首先把InnoDB表改爲MyISAM表,導入數據後再改爲InnoDB表,可是對於使用的額外的InnoDB特性(例如外鍵)的表不適用。

 

  另外,InnoDB表的行鎖也不是絕對的,若是在執行一個SQL語句時MySQL不能肯定要掃描的範圍,InnoDB表一樣會鎖全表,例如update table set num=1 where name like 「%aaa%」。

 

  任何一種表都不是萬能的,只用恰當的針對業務類型來選擇合適的表類型,才能最大的發揮MySQL的性能優點。

 

附:MySQL的另兩種存儲引擎,MEMORY和MERGE

 

       MEMORY存儲引擎使用存在內存中的內容來建立表。每一個MEMORY表只實際對應一個磁盤文件。MEMORY類型的表訪問很是得快,由於它的數據是放在內存中的,而且默認使用HASH索引。可是一旦服務關閉,表中的數據就會丟失掉。
        MERGE存儲引擎是一組MyISAM表的組合,這些MyISAM表必須結構徹底相同。MERGE表自己沒有數據,對MERGE類型的表進行查詢、更新、刪除的操做,就是對內部的MyISAM表進行的。

 

       MEMORY類型的存儲引擎主要用於那些內容變化不頻繁的代碼表,或者做爲統計操做的中間結果表,便於高效地堆中間結果進行分析並獲得最終的統計結果。對MEMORY存儲引擎的表進行更新操做要謹慎,由於數據並無實際寫入到磁盤中,因此必定要對下次從新啓動服務後如何得到這些修改後的數據有所考慮。
       MERGE用於將一系列等同的MyISAM表以邏輯方式組合在一塊兒,並做爲一個對象引用它。MERGE表的優勢在於能夠突破對單個MyISAM表大小的限制,經過將不一樣的表分佈在多個磁盤上,能夠有效的改善MERGE表的訪問效率。

 

做者:Oscarwin
連接:https://www.zhihu.com/question/20596402/answer/211492971
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

區別:

1. InnoDB支持事務,MyISAM不支持,對於InnoDB每一條SQL語言都默認封裝成事務,自動提交,這樣會影響速度,因此最好把多條SQL語言放在begin和commit之間,組成一個事務;

2. InnoDB支持外鍵,而MyISAM不支持。對一個包含外鍵的InnoDB錶轉爲MYISAM會失敗;

3. InnoDB是彙集索引,數據文件是和索引綁在一塊兒的,必需要有主鍵,經過主鍵索引效率很高。可是輔助索引須要兩次查詢,先查詢到主鍵,而後再經過主鍵查詢到數據。所以,主鍵不該該過大,由於主鍵太大,其餘索引也都會很大。而MyISAM是非彙集索引,數據文件是分離的,索引保存的是數據文件的指針。主鍵索引和輔助索引是獨立的。

4. InnoDB不保存表的具體行數,執行select count(*) from table時須要全表掃描。而MyISAM用一個變量保存了整個表的行數,執行上述語句時只須要讀出該變量便可,速度很快;

5. Innodb不支持全文索引,而MyISAM支持全文索引,查詢效率上MyISAM要高;

 

如何選擇:

1. 是否要支持事務,若是要請選擇innodb,若是不須要能夠考慮MyISAM;

2. 若是表中絕大多數都只是讀查詢,能夠考慮MyISAM,若是既有讀寫也挺頻繁,請使用InnoDB。

3. 系統奔潰後,MyISAM恢復起來更困難,可否接受;

4. MySQL5.5版本開始Innodb已經成爲Mysql的默認引擎(以前是MyISAM),說明其優點是有目共睹的,若是你不知道用什麼,那就用InnoDB,至少不會差。

相關文章
相關標籤/搜索