学艺不精,玩不转mariadb---order by排序好慢

warning: 这篇文章距离上次修改已过394天,其中的内容可能已经有所变动。

学艺不精,玩不转mariadb

一、背景

由于开发的项目较多,多个数据库版本又不同。虽然使用docker处理起来很方便,但是考虑到mysql和mariadb都没多大区别,就打算将手头上的使用mysql的数据库都迁移到mariadb上。正所谓“青出于蓝而胜于蓝”,mysql搞收费后,mariadb在不断地发展壮大,仅管用的不多,但是印象中==mariadb==还是不错的。

正好jumpServer用docker一键部署后就内置了mariadb,于是就把手上的项目数据库迁移到mariadb里,迁移过程很顺利。

  • 首先用navicat里先建一个xxx数据库
  • 再Execute sql file,选择对应的备份数据

    也可以用命令time gunzip < xxx_20231023170623.sql.gz | mysql -h 192.168.10.3 -P 33361 -u root xxx -p 来还原。

还原后以为就完事了,可以愉快的玩耍了。怎料故事才刚刚开始,测试查询竟然比原来的mysql还慢一倍(都是在docker容器里跑,都在同一服务器上跑)。

二、分析测试

首先检查了配置文件,两个数据库的配置文件都没啥好看的,都是默认配置。会不会是mariadb版本的问题或者jumpServer自带==降速==光环?于是拉了一个最新的mariadb镜像,直接按默认配置docker run,然后把数据库还原。经测试没任何改善,有点失望。

  • 最新mariadb版本 SAS万转硬盘,Raid5

image-20231026135924400

  • jms V3上的maraiadb版本 Intel SSD硬盘

image-20231026140323490

  • mySql 5.7版本 SAS万转硬盘 Raid5

    image-20231026140946721

由上面图片可知,mariadb真没传说中的快,加上order by还更慢了。网上有说没加索引造成的,可是mysql里我也没加索引呢。而且索引不是万能的,像我这样select 10万条数据,有可能索引就失效了。实际测试,mariadb里加索引后,explain解析看到索引也没生效,select 1万条左右倒是还可以走索引。

这个问题对项目影响很大,差两倍的查询时间,肯定接受不了。后来又查了各种资料,花了很多时间都解决不了,mysql里能轻松处理的事情,到mariadb里就拉了。

虽然加上order by排序后查询慢,但是如果不加排序的话,速度还是非常快的,如果能解决排序效率问题,用mariadb就很完美了!

三、总结

既然解决不了,又想把mysql数据库整合,那怎么办呢?唉,没办法,学艺不精,只能日后有时间再慢慢分析了。计划换回==正版的mysql==,直接在jumpServer里将mariadb替换成mysql!因为所以,另一个故事《jumpServer用mysql代替默认的mariadb数据库》来了。

评论已关闭