关系型数据库是采用关系模型来组织数据的数据库。
所谓关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表格及其之间的联系所组成的一个数据组 。
目前,用得最普遍的关系型数据库有 MySQL 、 Oracle 、 PostgreSQL 等 。
这里针对 Java 开发中最常用的 MySQL 进行阐述。
存储引擎
MySQL 主要有两种存储引擎,分别是 MyISAM 和 InnoDB 。
1) MyISAM
MySQL5.5 之前的默认引擎,特点如下 。
不支持行锁,读取时对需要读到的所有表加锁,写入时则对表加排他锁 。
不支持事务 。
不支持外键 。
不支持崩溃后的安全恢复 。
在表有读取查询的同时,支持往表中插入新记录 。
支持 BLOB 和 TEXT 的前 500 个字符索引,支持全文索引 。
支持延迟更新索引,极大地提升了写入性能 。
对于不会进行修改的表,支持压缩表,极大地减少了磁盘空间占用 。
2) InnoDB
MySQL 5.5 后的默认引擎,特点如下 。
支持行锁,采用 MVCC 来支持高并发,有可能死锁 。
支持事务 。
支持外键 。
支持崩溃后的安全恢复 。
不支持全文索引 。
由于 MyISAM 缓存有表 meta-data (行数等) ,因此在做 COUNT(*)时对于一个结构很好的查询是不需要消耗多少资源的 。
而对于 InnoDB 来说,则没有这种缓存 。
当你需要行锁定、事务时,使用 InnoDB 则是更好的选择, 也具有更高级的安全性 。
此外, MyISAM 和InnoDB 使用的索引也是有区别的,前者为非聚簇索引 ,后者为聚簇索引 。
总体来说, MyISAM 适合读密集型的表 ,而 InnoDB 适合写密集型的表。
在数据库做主从分离的情况下,经常选择 MyISAM 引擎作为主库的存储引擎。