找回密码
 立即注册
搜索

[数据库] 浅谈MySQL和MariaDB区别(mariadb和mysql的性能比较)

[复制链接]
智慧谋略 发表于 2022-8-24 22:13:57 | 显示全部楼层 |阅读模式
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。

MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

MariaDB由MySQL的创始人麦克尔·维德纽斯主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。

MariaDB名称来自麦克尔·维德纽斯的女儿玛丽亚(英语:Maria)的名字。

MariaDB直到5.5版本,均依照MySQL的版本。因此,使用MariaDB5.5的人会从MySQL5.5中了解到MariaDB的所有功能。从2012年11月12日起发布的10.0.0版开始,不再依照MySQL的版号。10.0.x版以5.5版为基础,加上移植自MySQL 5.6版的功能和自行开发的新功能。

在存储引擎方面,10.0.9版起使用XtraDB(名称代号为Aria)来代替MySQL的InnoDB。

MariaDB的API和协议兼容MySQL,另外又添加了一些功能,以支持本地的非阻塞操作和进度报告。

这意味着,所有使用MySQL的连接器、程序库和应用程序也将可以在MariaDB下工作。

在此基础上,由于担心甲骨文MySQL的一个更加封闭的软件项目,Fedora的计划在Fedora 19中的以MariaDB取代MySQL

MYSQL 相信大家都很清楚是什么了。那么mariadb是什么呢?

MariaDB数据库管理系统是MySQL的一个分支。是由MySQL之父Michael开发的。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险

那么两者之间的性能谁好谁差呢,我们现在就在同一台电脑上简单的测试下

我的笔记本环境是

cpu :I3

硬盘:普通机械硬盘(5400转)

内存:8G

系统:win10 64位

MYSQL版本:5.6

mariaDB版本:10.3

下面分别在MYSQL 和mariaDB 建库建表 插入千万级的测试数据 ID为主键,数据库引擎:MyISAM


查询语句均在Navicat下运行

1.先查询九百万条后的20条数据 就是下面这个语句

select * from usertb limit 9000000,20

mysql 的处理时间是3.09秒


mariaDB的运行时间是1.89秒


2.查询九百万条后的20条数据 根据ID倒序 就是下面这个语句

select * from usertb order by id desc limit 9000000,20

MYSQL用时121.26秒


MariaDB用时75.73秒


3.最后我们换条SQL语句来测试。用下面的SQL语句(MYSQL 常用的优化分页的语句):

select * from usertb where id<(select id from usertb order by id desc limit 9000000,1) order by id desc limit 20

MYSQL 用时3.13秒


MariaDB却用了70秒


为什么呢?个人猜想也是不是MariaDB的子查询没有MYSQL的快?于是再次测试

将上面的语句拆分成两条sql语句在MariaDB里执行查询如下:

select id from usertb order by id desc limit 9000000,1

得出ID是1000000

再查询 select * from usertb where id<1000000 order by id desc limit 20

发现两条SQL语句一起执行的时间也是3秒左右

总结:两个数据库各有优势 找到自己合适的优化方式就好,咱是小白一个 不会优化 以上是无聊时的测试。


 楼主| 智慧谋略 发表于 2022-8-24 22:14:21 | 显示全部楼层
针对不同的用户,MySQL 分为两个版本:
  • MySQL Community Server(社区版):该版本完全免费,但是官方不提供技术支持。
  • MySQL Enterprise Server(企业版):该版本能够以很高的性价比为企业提供数据仓库应用,支持 ACID 事物处理,提供完整的提交、回滚、崩溃恢复和行级锁定功能,但是该版本需要付费使用,官方提供电话技术支持。

注意:MySQL Cluster 主要用于架设群服务器,需要在社区服务或企业版的基础上使用。

MySQL 的命名机制由 3 个数字和 1 个后缀组成,例如 mysql-5.7.20:
  • 第 1 个数字“5”是主版本号,用于描述文件的格式,所有版本 5 的发行版都有相同的文件夹格式。
  • 第 2 个数字“7”是发行级别,主版本号和发行级别组合在一起便构成了发行序列号。
  • 第 3 个数字“20”是在此发行系列的版本号,随每次新发行的版本递增。通常选择已经发行的最新版本。

在 MySQL 开发过程中,同时存在多个发布系列,每个发布系列的成熟度处在不同阶段。
  • MySQL 5.7 是最新开发的稳定(GA)发布系列,是将执行新功能的系列,目前已经可以正常使用。
  • MySQL 5.6 是比较稳定的(GA)发布系列,只针对漏洞修复重新发布,不增加会影响稳定性的新功能。
  • MySQL 5.1 是一个稳定的(产品质量)发布系列,只针对严重漏洞修复和安全修复重新发布,不增加影响该系列稳定性的重要功能。
注意:对于 MySQL 4.1 等低于 5.0 的老版本,官方将不再提供支持。所有发布的 MySQL 版本已经经过严格标准的测试,可以保证其安全可靠地使用。针对不同的操作系统,读者可以在MySQL官方下载页面(http://dev.mysql.com/downloads/)下载相应的安装文件。

 楼主| 智慧谋略 发表于 2022-8-24 22:14:38 | 显示全部楼层
像Oracle这样成熟稳定的数据库,足以支撑海量数据的存储与查询了?为什么还需要数据切片呢?的确,Oracle的DB确实很成熟很稳定,但是高昂的使用费用和高端的硬件支撑不是每一个公司能支付的起的。试想一下一年几千万的使用费用和动辄上千万元的小型机作为硬件支撑,这是一般公司能支付的起的吗?即使就是能支付的起,假如有更好的方案,有更廉价且水平扩展性能更好的方案,我们为什么不选择呢?

收费是按照cpu个数和用户数两种方式进行的:http://blog.csdn.net/hzw2312/article/details/8617607

mysql被sun收购,sun最后又被oracle收购。

自己公司两个产品,一个免费,一个收费。并不一定不好。免费本身可以帮助自己积累用户,形成公司口碑。
比如搜狐公司的搜狗拼音输入法,是免费的。可以帮助占领市场。

关键在于:公司a,b两个产品是竞争关系,用了a产品就完全不需要使用b了,因为两个产品之间功能是重叠的。a,b两个产品是相互威胁的关系。那完全是自己砸脚,所以,一般就会限制免费版本发展(人为的用些方式,不会一步到位,逐步进行),以避免MYSQL最后威胁到收费的oracle销售和占有率。


在oracle收购后,MySQL 被发展成一个封闭源码的项目,只有 Oracle 和少数 Oracle 选出的公司才能参与。

1.MySQL 新的企业延伸套件采取封闭源码

2.数据库的臭虫不再公开

3.不再积极更新 MySQL 的公开代码库

4.未能快速传达或修复安全问题,这一点让 Linux 散布套件对 Oracle 很不满

5.Oracle 选择移除功能,而非修正臭虫

6.MySQL 5.5 的新程序代码不再有测试案例

不开源,社区没法参与进来,就会阻碍产品继续完善。


这很像:shopex与ecshop以前是竞争对手,一个开源,一个源码加密。echsop卖给discuz后,discuz用了一段时间,精力有限吃不下又转卖给了shopex。

现在echsop也是慢慢边缘化了。公司所投入到这个产品的人力就会进行倾斜(尤其是不赚钱威胁产品会故意倾斜)。










按需要在mysql的这个下载界面会有几个版本的选择。

1. MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。
2. MySQL Enterprise Edition 企业版本,需付费,可以试用30天。
3. MySQL Cluster 集群版,开源免费。可将几个MySQL Server封装成一个Server。
4. MySQL Cluster CGE 高级集群版,需付费。
5. MySQL Workbench(GUI TOOL)一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。MySQL Workbench又分为两个版本,分别是社区版(MySQL Workbench OSS)、商用版(MySQL Workbench SE)。

备注:MySQL Community Server 是开源免费的,这也是我们通常用的MySQL的版本。




一、版本说明:

MYSQL自从被ORCLE收购后,软件的版本也ORACLE化,整体的感觉就是服务的费用提高了很多,整体的软件的Supports也有相应的提高;MYSQL根据软件的功能可以分成三个版本:社区版、企业版、集群版。

社区版:1、 社区版是企业版的测试版,免费的,包含所有Mysql的最新功能,社区版的功能比企业版的多;

2、官方的支持服务只针对企业版,用户在使用社区版时出现任何问题,Mysql官方概不负责;

企业版和集群版:经过测试之后稳定版本,需要购买oracle相应的服务费用,用户可以直接从官网下载相应的软件,但是不能用于商业的模式,被发现后需要缴费;

企业版和集群版最大的区别就是软件的功能会有所不一样,




mysql创始人后来又整了一个新的数据库:MariaDB

这里是关于这个数据库的采访:
http://database.51cto.com/art/201306/396940.htm


使用理由:

1、从 MySQL 转移至 MariaDB 的难易度?

Monty:只是小事一桩。只要移除 MySQL,然后安装 MariaDB。你的所有工具,连接程序都可以如常运作。你也不需要导出和汇入数据。格式与文件名都是相同的。

2、基于mysql创始人,应该完全是mysql思想的一个复制,
 楼主| 智慧谋略 发表于 2022-8-24 22:14:56 | 显示全部楼层
MySQL版本到底该咋选帅萌的杂谈铺2020-07-10


前言有不少同学在群里说,要用MySQL8.0 要上MGR。
我对此提出了不同的观点, 我个人并不推荐这么做。
观点一

MySQL8.0目前来看并不是一个稳定的版本,因为他的发版模式有了改变, 每个小版本都有“新特性”。

就拿最新的MySQL8.0.20来说,他改变redo log的格式,导致物理备份工具xtrabackup的不兼容。

就是因为他每个版本都有新特性,就可能触发未知的bug

哪有人就说了,我用MySQL8.0但我不用他新特性行不行?

答案是:NO,他都改redo log的格式,改了优化器,这种基础代码的修改。

咋的~ 还能不用redo、优化器啊?



观点二触发未知bug,不是可怕的事。可怕的是 你不能修复,目前国内具备修复MySQL源码级的专家基本上都汇聚在头部互联网的大厂中。
二三线互联网厂商基本上不具备修复MySQL源码级bug的专家,这点很重要。因为修改MySQL的源码,不是一个人能够做到的事,哪怕你能读源码。但做不到修源码bug,真的敢修bug,但真的敢上线吗?
修复了这个问题,成功解决了这个bug,但有可能因为修改的代码,触发了新的bug,然后对线上业务造成影响,这个月绩效都凉凉。#换句话说 头部大厂敢上MySQL8.0,人家是有一定的技术储备。你知道人家为上MySQL8.0,都做了那些努力?如果所在单位也有这种专业团队的话,请关闭这篇文章,有专业团队技术保障、兜底。还担心个啥?
观点三退而求其次,会上报bug给官方,官方最快的速度,也得下一个版本给修复。(MySQL目前三个月发一个版本)。最慢这个bug 官方忽视了。哪指定有人说我买企业版,享受企业vip服务。先问问你的boss给批这笔钱吗?在问问你们单位财务给拨这笔款吗?如果boss批了,用了企业版MySQL,请关闭这篇文章,MySQL8.0随便上。
这些都是废话,有了官方的支持,还担心个啥?

观点三一定有同学说,为啥我上了8.0 就没碰见未知bug呢。
答:因为没业务量啊,qps几百那种库,用啥db都一样。要是数据量在少用Excel、txt存都行。
那么到底改选择哪个版本当然是MySQL5.7 或者MySQL5.6啊。
MySQL5.7和MySQL5.6 用的多,大家都在用,经历过大规模的使用。基本上不会触发致命的bug。MySQL5.6和MySQL5.7的生命周期快到了,我个人认为是好事把现有的MySQL升级最新的MySQL5.6和5.7最新的子版本。在遇到bug,你就可以跟老板说 MySQL5.6和5.7 官方不更新子版本了。就这逼样了,修复是不可能修复了,但我可以告诉你咋规避,凑合凑合用吧,你要必须修复 可以卖企业版MySQL或者用Oracle不想付费的话就这么用吧等到最终版本 升级一次,再也不用升级了~

其实现在最大的问题就是:

  • MySQL8.0 并不稳定,每个版本都有新功能。
  • 用的人少,还没有大规模的应用。
  • 周边的组件或者兼容程度还不够。
  • MySQL8.0跳版本。MySQL8.0.5-MySQL8.0.10 这个版本被跳了,其实现在的MySQL8.0.20 就是MySQL8.0.15
  • MySQL是开源软件,遇到问题,在qq群、微信群里问,不一定有人搭理你。哪有这么闲的人,好心人都公司没活吗?给网友解答问题,网友也不给人钱啊,人家不吃饭的吗?


对DBA而言,求的是稳不是求新。你得为公司的业务的稳定性、DB的稳定性考虑。第一个吃螃蟹,不一定香,也有可能是毒药。是因为大家都知道螃蟹是香的,先入为主。如果螃蟹是砒霜呢,还会这么说吗?
其实很多公司前年、去年刚把MySQL升到5.6、5.7现在又要升8.0。也不太现实,没强需求谁折腾数据库啊.那么啥时候上MySQL8.0呢,我大胆预测一下,三年后。现在MySQL发版速度,每年4个版本。三年后大概就是MySQL8.0.30左右,那时候估计也稳定了。


 楼主| 智慧谋略 发表于 2022-8-24 22:15:44 | 显示全部楼层

这次应小伙伴的要求,来总结下这个 MySQL 主要版本的新特性




那么,我们一起往下看看叭~




我们直接来到官网查看







可以看到这里有三个版本 5.6 , 5.7 , 8.0




额 既然 5.5 找不到了,那我们就记住他的主要特点:




  • innodb 就是从 5.5 这个版本开始成为 默认的存储引擎
  • 引入了真 UTF8 ——> utf8mb4



为什么只有两点呢? 因为 4ye 的脑瓜子就只有这两点 哈哈哈







下面开始 5.6 的探索~




5.6


MySQL 5.6 Release Notes




打开上面的链接 , 如下图,这里在介绍这个新特性







What Is New in MySQL 5.6




剩下的就不多赘述啦,简单摘录了一些,需要完整资料的小伙伴请移步到官网查看~ (建议去翻一翻 ,毕竟除了新特性,还有 innodb 整体的介绍!)







innodb


这里对存储引擎 innodb 做了下面的增强




  • 可以创建 全文索引
  • 可以修改未压缩表的 InnoDB 页大小设置为 8KB4KB ,默认是 16KB 注意这里只有这三个参数有效(4 ,8 ,16) 。 参数: innodb_page_size
  • InnoDB 的 redo log 文件可存储的最大值从 4g 升到 512g , 参数: innodb_log_file_size
  • 可以设置 innodb 压缩级别 , 级别等级为 0-9 参数: innodb_compression_level
  • Innodb 将 flush 刷盘操作从主线程移动到其他线程
  • 默认用独立的表空间 ibd
  • Undo Log 可以保存在独立的表空间



Partitioning


这里对分区做了下面的加强




  • 最大分区数量增加到 8192
  • 支持显示分区选择 比如: SELECT * FROM t PARTITION (p0, p1) WHERE c < 5



MySQL NDB Cluster


Mysql集群,在这个版本作为独立的产品发布




注意存储引擎不是默认的 innodb ,而是 NDB







Replication and logging


复制和日志记录




  • 可以从远程服务器读取 binlog 参数: --read-from-remote-server, -R ; --raw
  • 延迟复制 参数: CHANGE MASTER TO



Optimizer enhancements


优化器增强




  • 就是在这里开始的,我们可以用 EXPLAIN 来查看 DELETE,INSERT,REPLACE,UPDATE等 DML 操作的执行计划。 在这之前,它只支持 SELECT 操作。
  • 优化子查询
  • 主机缓存



Configuration Changes


5.7


innodb


  • 增加 DATA_GEOMETRY 类型来支持空间数据类型,以前是用 blob
  • innodb 的缓存池 dump 和 load 加强 ,允许按百分比去存储缓存池中的页面 参数: innodb_buffer_pool_dump_pct 默认值是 25
  • InnoDB 增加了对全文解析器插件的支持。
  • 支持多线程来刷新缓冲池中的脏页面 内存数据页跟磁盘上数据页内容不一致,将内存页称为脏页
  • 由于文件系统 The Fusion-io Non-Volatile Memory (NVM) 在 Linux 上提供了原子操作,这导致 innodb 的 doublewrite 变得冗余,所以在该文件系统上,会自动关闭 doublewrite
  • innodb_buffer_pool_size 参数是动态的,允许您在不重启服务器的情况下调整缓冲池的大小
  • InnoDB 支持使用 spatial 索引来索引空间数据类型
  • 支持本地分区
  • 默认行格式由 compact 改为 DYNAMIC



其他


一. 支持JSON




从MySQL 5.7.8开始,MySQL支持原生JSON类型。




震惊(居然还有这回事)







二. EXPLAIN 可以用来获取在命名连接中执行的可解释语句的执行计划




EXPLAIN [options] FOR CONNECTION connection_id;


三. 允许在某个时间点,有多个触发事件




之前:对于触发器事件(INSERT、UPDATE、DELETE)和操作时间(BEFORE、AFTER)的组合,一个表最多只能有一个触发器,即在某个触发时间点只能有一个触发事件




四. 多源复制




可将多个服务器的内容备份到一个服务器




8.0


突然发现每次更新都在加强这个 innnodb




innodb


  • 可以通过 INNODB_CACHED_INDEXES 查看每个索引缓存在 InnoDB 缓冲池中的索引页数量
  • 可以使用一个新的动态变量 innodb_deadlock_detect 来禁用死锁检测
  • redo log 优化,可以并发地写到日志缓冲区
  • 日志缓冲区的大小可以通过 innodb_log_buffer_size 动态调整
  • undo log 不再存放在系统表中
  • 支持原子性的 DDL , 确保操作完全成功或者失败
  • 从 MySQL 8.0.20 开始,doublewrite 缓冲区存储在 doublewrite 文件中



其他


一. Json 增强







二. 默认值




可以为这些类型增加默认值 BLOB、TEXT、GEOMETRY 、 JSON




三. 优化器增强




  • 支持隐藏索引



ALTER TABLE t1 ALTER INDEX i_idx INVISIBLE;ALTER TABLE t1 ALTER INDEX i_idx VISIBLE;


  • 索引支持降序排序






四. 支持窗口函数




五. 支持正则表达式




(还有这操作的 )




六. 备份锁




允许在线备份时使用 DML 语句




总结


看完这篇文章后,不知道小伙伴们会对哪个更新印象最深呢?




比如 4ye 对这几点有点小印象~




  • 5.6全文索引,innodb 页的大小调整(4,8,16 KB)三档,独立表空间还有执行计划的加强,不仅仅select. 以及结尾那么大一个表格的参数
  • 5.7 的 JSON,空间数据类型 DATA_GEOMETRY ,以及空间索引 spatial 的出现,还有doublewrite ,脏页面的优化 和 行格式 DYNAMIC 的出现(以前 compact )
  • 8.0正则隐藏索引以及它的索引排序



对了 还有,开头的那两句~




innodb 就是从 5.5 这个版本开始成为 默认的存储引擎 引入了真 UTF8 ——> utf8mb4


 楼主| 智慧谋略 发表于 2026-5-11 23:34:47 | 显示全部楼层
MariaDB是一款开源的关系型数据库管理系统,由MySQL的创始人迈克尔·维德纽斯主导开发。
MariaDB在MySQL的基础上进行了大量优化和改进,保持完全兼容的同时,加入了更多存储引擎、性能优化和安全性增强。对于需要数据库支持的Web应用、服务器项目和开发环境来说,MariaDB是目前最可靠的开源数据库选择之一。
在开源关系型数据库领域,MariaDB和MySQL是双胞胎但又有区别:

对于普通Web开发来说,MariaDB在兼容性、性能和社区支持之间达到了最好的平衡。如果你之前用过MySQL,那用MariaDB几乎不需要学习成本,命令、语法、工具完全兼容,直接换过来就行。

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|探索掌握未知、共创美好未来

GMT+8, 2026-9-17 01:44 , Processed in 0.229095 second(s), 44 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表