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,至少不会差。

相关文章
相关标签/搜索