mysql在windows和linux执行同样的sql语句,速度相差非常大是为什么

xz296450284 2016-12-18 04:14:50

一张表,有80w条数据,大小是400M
在win10上查询表的所有数据,运行了一个小时还没完。
把数据表转移到linux下,运行同样的sq语句,只要30秒
不明白是什么原因


表结构:

CREATE TABLE `text` (

`id` int(10) NOT NULL AUTO_INCREMENT,
`old_id` int(10) unsigned NOT NULL,
`old_title` varchar(30) NOT NULL,
`old_text` mediumtext CHARACTER SET utf8mb4 NOT NULL,
`alias` varchar(200) DEFAULT NULL,

PRIMARY KEY (`id`),
KEY `index_title` (`old_title`(15))

) ENGINE=InnoDB AUTO_INCREMENT=787998 DEFAULT CHARSET=utf8


执行的SQL语句:

select * from text order by old_title;


windows上查询了60秒手动停止,60秒只查到1.8w条记录



开虚拟机运行centos,将win上的sql表复制到虚拟机中
用win的nativcat连接查询,返回所有结果只用了30秒




...全文
2114 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
danhuoren 2019-11-11
  • 打赏
  • 举报
回复
windows上和linux上的差异还是很大的,我的情况是windows服务器:32核+64G内存,linux服务器2核4G,一张一模一样的表在两个系统中的mysql中表现:widows:0.170s,linux:0.016s,记录才17万条,不知道如何优化windows上的配置
crstudio_wb 2019-11-11
  • 打赏
  • 举报
回复
我也想性能是由差异,但应该不至于是 1小时和30秒的差别吧
xz296450284 2016-12-21
  • 打赏
  • 举报
回复
引用 13 楼 zuiweng158 的回复:
windows的 sort_buffer_size和cnetos一样吗,


sort_buffer_size值我看了都是262144

我觉得也是参数的原因,于是我在网上找相关的参数一个个试
终于发现是这个参数:

innodb_buffer_pool_size

这个参数默认值是128M,我改成512M后,速度反倒比centos更快了
(之前centos查询整表用时30秒,而windows查了一个小时还没完)




我的理解是,根据上面Show profiles的结果,影响性能的是排序
表的大小是400M,这个参数改成大于400M的值,查询整个表,就会把查询结果加载到内存中,在内存中排序

唯一不理解的是,centos和windows这个参数值都是128M
为什么centos快那么多...








xz296450284 2016-12-21
  • 打赏
  • 举报
回复
引用 16 楼 yexiong 的回复:
linux 环境下的 mysql 确实比 win 的快很多。 我们的数据都是亿级别的。 几百块的阿里云 linux 基本也都是秒出。
我用win查询就是卡在排序上,可能win的mysql默认配置不适合一次获取几百M的数据
xz296450284 2016-12-21
  • 打赏
  • 举报
回复
引用 15 楼 fcy_n 的回复:
额,楼主的这两个环境配置不一样?
只有系统不一样,mysql配置都是默认值,没有修改
yexiong 2016-12-21
  • 打赏
  • 举报
回复
我们测试环境 win 配置比linux 的高
yexiong 2016-12-21
  • 打赏
  • 举报
回复
linux 环境下的 mysql 确实比 win 的快很多。 我们的数据都是亿级别的。 几百块的阿里云 linux 基本也都是秒出。
fcy_n 2016-12-21
  • 打赏
  • 举报
回复
额,楼主的这两个环境配置不一样?
msh158 2016-12-20
  • 打赏
  • 举报
回复
windows的 sort_buffer_size和cnetos一样吗,
xz296450284 2016-12-19
  • 打赏
  • 举报
回复
引用 6 楼 rucypli 的回复:
explain下两个sql的执行计划是否一致


运行这条语句explain的结果:

explain select * from text order by old_title


查询的结果都一样

Centos:


Windows:



xz296450284 2016-12-19
  • 打赏
  • 举报
回复
引用 5 楼 ACMAIN_CHM 的回复:
show profile 看一下耗时在哪一阶段。


win和centos获取1w条记录,查看Show profiles的结果

select * from text order by old_title limit 10000;

只有 Creating sort index 这条记录相差较大

Centos:



Windows:


rucypli 2016-12-19
  • 打赏
  • 举报
回复
explain下两个sql的执行计划是否一致
xz296450284 2016-12-19
  • 打赏
  • 举报
回复
引用 10 楼 rucypli 的回复:
如果参数都一样 那这说是两台主机性能的差别了
只有一台主机,centos是在虚拟机上运行的
xz296450284 2016-12-19
  • 打赏
  • 举报
回复
引用 9 楼 ACMAIN_CHM 的回复:
看上去应该是两个操作系统对文件操作的不同效率了。WIN下是不是有没什么杀毒软件在检查所有的磁盘写?
恩,杀毒软件退出还是一样
rucypli 2016-12-19
  • 打赏
  • 举报
回复
如果参数都一样 那这说是两台主机性能的差别了
ACMAIN_CHM 2016-12-19
  • 打赏
  • 举报
回复
看上去应该是两个操作系统对文件操作的不同效率了。WIN下是不是有没什么杀毒软件在检查所有的磁盘写?
ACMAIN_CHM 2016-12-18
  • 打赏
  • 举报
回复
show profile 看一下耗时在哪一阶段。
xz296450284 2016-12-18
  • 打赏
  • 举报
回复
引用 2 楼 wangjian0228 的回复:
虚拟机不在win上吧,应该是网络问题
网络没问题,虚拟机是运行在win系统上的 win系统的mysql才是有问题的
xz296450284 2016-12-18
  • 打赏
  • 举报
回复
引用 1 楼 kxjrzyk 的回复:
看一看参数配置与电脑配置,不同配置是不一样的
win系统的mysql,my.ini中就设置了编码 linux的mysql是新安装的,没有设置什么参数
致命的西瓜 2016-12-18
  • 打赏
  • 举报
回复
虚拟机不在win上吧,应该是网络问题
加载更多回复(1)

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧