免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6439 | 回复: 11

求教:MySQL查询速度差异极大 [复制链接]

论坛徽章:
1
双子座
日期:2013-11-14 17:43:24
发表于 2012-05-24 11:47 |显示全部楼层
各位MySQL的兄弟姐妹:
   
    最近生产环境下的MySQL查询变的很慢。同样的数据量(17000)条左右的数据,需要耗时16.83秒;

但是我把同样的数据导入内部测试平台后,使用同样的SQL语句查询同样的数据,只有0.42秒.

     内网的硬件平台没有外网好,但是外网做了radi,内网没有做,是这个原因么?

    大家有什么好的建议么?

2012-5-24

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
发表于 2012-05-24 13:25 |显示全部楼层
回复 1# star_in_sky


    同样的数据量(17000)条左右的数据,需要耗时16.83秒;

看一下这16.83秒服务器都消耗在什么资源上,一般CPU和IO可能是瓶颈

论坛徽章:
0
发表于 2012-05-24 17:02 |显示全部楼层
拿到生产环境下explain下看看啊,索引是否用到。
是否是锁争抢。

论坛徽章:
1
双子座
日期:2013-11-14 17:43:24
发表于 2012-05-24 17:14 |显示全部楼层
感谢楼上两位。

按照两位的提示,还在检查中。

希望快点解决啊。

论坛徽章:
1
双子座
日期:2013-11-14 17:43:24
发表于 2012-05-24 21:37 |显示全部楼层
本帖最后由 star_in_sky 于 2012-05-25 09:29 编辑

感谢上面两位的建议,问题已经解决了。

最近两天在生产环境中,我发现MySQL查询某张数据表(table_a)的速度急剧下降(查询速度下降了80%),

所以我在内网的数据库环境中执行了类似的查询,速度非常快。

因此我开始觉得是外网的数据库的磁盘有问题,所以查询了两个数据量比较小的表(就是上面

的那个17000条数据),结果显示速度是有差距。

但是在这里,我犯了一个细微的错误:

查询外网的数据统计时间还包含了网络传输的时间;而内网中,网络传输速度极快,所以出现了

极大的速度差异(正如cenalulu说的那样,IO是瓶颈,不过这个是网络IO)。因为我使用MySQL

自带的命令行工具,没有注意这个查询时间实际上包含了网络传输时间。

正因为这个错误,给了我一个误导,一直觉得是外网计算机磁盘有问题。

之后,我把外网的table_a的数据同步到了内网数据库中,进行查询,结果却和外网一直,查询速度极慢。

这下让我知道了先前我的思路有问题;调整思路后,我检查了一下查询的SQL语句,在数据表中增加了

一个新的索引,避免了全表扫描(使用explain可以看到,谢谢duzq1985的提示)速度马上提升了。最终问题得以解决。

虽然问题已经解决,但是我对下面的一个问题还有些疑惑:

1. 其实同步table_a之前,内网的table_a中有400万条数据,未加索引,速度并没有慢到不可忍受的地步。
   
   但是,外网的table_a的数据仅仅比内网中多100万条(没有准确查过,但是根据估计也就是这个数量级)

  就让同样的查询语句效率下降了80%。是不是MySQL单表中可以容纳的数据有一定的限度,当超过400万条的

  数据后就会严重影响查询效率?

  我的MySQL运行在Win2003 X64+R2,版本是5.0.18, 系统内存2GB,InnoDB数据库引擎。


论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
发表于 2012-05-25 09:17 |显示全部楼层
太古老了...............

论坛徽章:
1
双子座
日期:2013-11-14 17:43:24
发表于 2012-05-25 09:33 |显示全部楼层
呵呵,是说MySQL和Win2003 Server古老么?

不过说实话,是挺老的。

那么MySQL对于单表数据量是否存在一个查询的临界点呢?就像我遇到的问题?

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
发表于 2012-05-25 09:55 |显示全部楼层
回复 5# star_in_sky


   
但是,外网的table_a的数据仅仅比内网中多100万条(没有准确查过,但是根据估计也就是这个数量级)

  就让同样的查询语句效率下降了80%。是不是MySQL单表中可以容纳的数据有一定的限度,当超过400万条的

  数据后就会严重影响查询效率?


可能是达到了一个阈值,导致执行计划不一样的,从而查询效率差异很大

论坛徽章:
0
发表于 2012-05-25 14:41 |显示全部楼层
cenalulu 发表于 2012-05-25 09:55
回复 5# star_in_sky


对于表包含的数据,没有一个“门限”说法。

当你看到不同数据量的表对同一个SQL产生不同的执行计划是,是因为数据的“分布状况”发生了改变,它影响了优化器。

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
发表于 2012-05-25 16:06 |显示全部楼层
回复 1# star_in_sky


    是不是你的select有问题?太消耗资源
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP