首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mariadb性能与mysql相比很差

mariadb性能与mysql相比很差
EN

Stack Overflow用户
提问于 2018-06-07 23:33:20
回答 2查看 1.1K关注 0票数 0

我听说Mariadb的性能比mysql更好,所以我克隆了一个网站,用他的整个数据库来比较两者之间的差异。

实际上,使用缓存时一切似乎都更快,但当没有缓存时,我会有非常奇怪的输出,在一些大的请求上,mariadb比mysql差得多:

代码语言:javascript
复制
MariaDB> select SQL_NO_CACHE [...] ORDER BY FIELD LIMIT 0, 200;
Empty set (10.13 sec)

mysql> select SQL_NO_CACHE [...] ORDER BY FIELD LIMIT 0, 200;
Empty set (0.76 sec)

这是一个巨大的差异,怎么可能呢?

完整查询如下所示:

代码语言:javascript
复制
SELECT 
    SQL_NO_CACHE [...] 
FROM 
    table1
WHERE
    field1 = 'val1' and
    field2 = 'val2' and
    (field3='val3' or INSTR(field3, 'val3'))
ORDER BY field4 DESC LIMIT 0, 200;

下面是对请求的解释:

代码语言:javascript
复制
+----+-------------+----------+------+--------------------------+---------+---------+-------+--------+-----------------------------+
| id | select_type | table    | type | possible_keys            | key     | key_len | ref   | rows   | Extra                       |
+----+-------------+----------+------+--------------------------+---------+---------+-------+--------+-----------------------------+
|  1 | SIMPLE      | table1   | ref  | field1,field3            | field1  | 123     | const | 125832 | Using where; Using filesort |
+----+-------------+----------+------+--------------------------+---------+---------+-------+--------+-----------------------------+
EN

回答 2

Stack Overflow用户

发布于 2018-06-07 23:50:49

除了获取时间之外,还需要在两个环境中运行EXPLAIN,然后进行比较。也许MariaDB正在使用不同的索引,或者正在执行完全扫描。也许InnoDB统计数据不是最新的.指示MariaDB优化器该表为空,而不是空的。

有了这么大的差异,我倾向于认为I/O可能是一个贡献者。

也许MySQL实例上的InnoDB缓冲池比Mariadb实例上的要大得多。(这不是一个明确的诊断。这只是我会考虑的事情。

我将查看InnoDB缓冲区缓存的大小和存储体系结构,并验证它们在两台服务器上是否相同。

在比较性能时,我会在每个实例上多次运行相同的查询,丢弃第一次执行的时间,并对剩余时间进行平均。

说“用他的整个数据库克隆”让我们相信数据库的一切都是相同的,相同的存储引擎,相同的索引,相同的字符集和字符列排序规则,等价的数据库配置,等等。但也许我们的信念是没有根据的。

票数 3
EN

Stack Overflow用户

发布于 2018-06-08 10:48:49

很难说这是一个测试用例错误,还是分支之间有这么大的差异。我将漫谈许多可能性中的一些(除了Spencer之外):

请提供SHOW CREATE TABLE

两台服务器都需要

代码语言:javascript
复制
INDEX(field1, field2, field4)

其中1和2可以是任意顺序;4必须是最后一个。

是否有任何子查询?这是MySQL和MariaDB出现重大分歧的一个领域。

OR是一个性能杀手;您需要使用UNION的帮助吗?

我的一条经验法则是缓存可以带来10倍的不同。这两个时间间隔大约是10倍。会不会是MySQL使用的是热缓存?简单的测试是运行两次计时,然后进行第二次计时。

哪些版本的MySQL和MariaDB?他们的优化器在5.6 / 10.0开始进行重大的转移。无论哪种方式,我都看到了巨大的时间差异。(而且,跟踪提供帮助的优化器功能并不总是那么容易。)

是否涉及虚拟列或生成的列?这是另一个存在重大分歧的领域。还是JSON?我是不是已经要了SHOW CREATE TABLE

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50745143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档