2021-11-18 00:26:02
MySQL和Oracle在宏观和微观层面存在多方面区别,宏观上主要体现在数据库规模、成本、并发支持及内存占用,微观上则涵盖事务支持、并发性、数据持久性、事务隔离级别、提交方式、逻辑备份、SQL灵活性、数据复制、分区功能、售后费用、权限安全及性能诊断等方面。具体如下:
宏观区别Oracle属于大型数据库,功能全面且强大,适用于大型企业级应用;而MySQL是中小型数据库,更侧重于轻量级应用。
Oracle是商业软件,需要付费购买,且价格较为昂贵;MySQL是开源软件,可免费使用,降低了使用成本。
Oracle支持大并发、大访问量,是OLTP(联机事务处理)的理想工具,能够满足高负载的业务需求。
MySQL在高并发场景下的性能相对较弱,虽然也能处理一定程度的并发请求,但与Oracle相比仍有差距。
MySQL安装完成后占用的内存远小于Oracle,且Oracle在运行过程中内存占用会逐渐增加。
MySQL默认不支持事务,但部分存储引擎(如InnoDB)支持事务处理;Oracle则完全支持事务,能够确保数据的完整性和一致性。
MySQL以表锁为主,对资源锁定的力度较大。如果一个会话对一个表加锁时间过长,会导致其他会话无法更新该表的数据,从而影响并发性能。
Oracle使用行级锁,对资源锁定的力度较小。它只锁定SQL操作所需的资源,且加锁是在数据行上,不依赖于索引。因此,Oracle对并发性的支持更好,能够更高效地处理并发请求。
Oracle保证提交的事务均可恢复。它将提交的SQL操作写入在线联机日志文件,并保存到磁盘上。如果数据库或主机异常重启,Oracle可以依靠联机在线日志恢复客户提交的数据。
MySQL默认提交SQL语句,但在更新过程中如果出现数据库或主机重启的问题,可能会导致数据丢失。
MySQL默认采用repeatable read隔离级别,而Oracle采用read commited隔离级别。二者都支持serializable串行化事务隔离级别,可实现最高级别的读一致性。
Oracle通过在undo表空间中构造多版本数据块来实现读一致性。每个会话查询时,如果对应的数据块发生变化,Oracle会在undo表空间中为该会话构造其查询时的旧数据块。
MySQL没有类似Oracle的构造多版本数据块的机制,只支持read commited隔离级别。一个会话读取数据时,其他会话不能更改数据,但可以在表最后插入数据。会话更新数据时,需要加上排它锁,其他会话无法访问数据。
Oracle默认不自动提交,需要手动提交事务,这给了用户更多的控制权,可以在适当的时候确认事务的提交。
MySQL默认自动提交,简化了操作流程,但对于需要精确控制事务提交的场景可能不够灵活。
MySQL逻辑备份时需要锁定数据,以保证备份数据的一致性,但这会影响业务正常的DML操作。
Oracle逻辑备份时不锁定数据,且能够保证备份数据的一致性,对业务的影响较小。
MySQL对SQL语句有很多实用且方便的扩展,例如limit功能(分页),insert可以一次插入多行数据,提高了数据处理的效率。
Oracle在这方面相对稳重传统,分页是通过伪列和子查询完成的,插入数据只能一行行进行。
MySQL复制服务器配置简单,但主库出现问题时,从库有可能丢失一定的数据,且需要手工切换从库到主库。
Oracle既有推或拉式的传统数据复制,也有Data Guard的双机或多机容灾机制。主库出现问题时,可以自动切换备库到主库,但配置管理较为复杂。
MySQL的分区表功能还不太成熟稳定,在处理大规模数据时可能存在性能问题。
Oracle的分区表和分区索引功能非常成熟,可以提高用户访问数据库的体验,尤其适用于处理大规模数据和高并发查询的场景。
Oracle作为商业软件,提供售后服务,用户在使用过程中遇到问题可以联系客服寻求帮助。
MySQL是开源软件,没有官方的售后服务,用户需要自行解决问题或依靠社区支持。
Oracle的权限与安全概念比较传统,中规中矩,提供了较为完善的权限管理机制。
MySQL的用户与主机有关,这种设计在一定程度上存在安全隐患,更容易被仿冒主机及IP攻击。
Oracle有各种成熟的性能诊断调优工具,如AWR、ADDM、SQL Trace、TKProof等,能够实现很多自动分析、诊断功能,帮助管理员快速定位和解决性能问题。
MySQL的诊断调优方法较少,主要有慢查询日志,对于复杂的性能问题诊断和调优相对困难。