首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

MySQL查询耗时过长有关问题

2012-02-08 
MySQL查询耗时过长问题一、表基本信息如下无任何外键及索引二、查询执行时间问题1.执行语句 SELECT Count(ME

MySQL查询耗时过长问题
一、表基本信息如下



无任何外键及索引


二、查询执行时间问题
1.执行语句 SELECT Count(MESSAGE_ID) FROM blog_message 耗时9.484s, 记录结果为 180525条记录
2.执行语句查询最后一条记录 SELECT * FROM blog_message WHERE MESSAGE_ID='1000224687' 耗时0.031s
3.执行语句查询第一条记录 SELECT * FROM blog_message WHERE MESSAGE_ID='1000000000' 耗时不到 0.000s
4.执行语句查询中间记录 SELECT * FROM blog_message WHERE MESSAGE_ID='1000116878' 耗时0.031s


问题,总共的数据也才十八万条而已,为什么count的时候耗时将近十秒,而如果在navicat中直接查询表信息的话一下子就可以统计出来总共有多少条记录了。
求原因及改进方案




刚才重新执行了一下,正常情况下查询速度大概是11秒。
执行了一次analyze,速度提升到9秒多。
再执行了一次优化,报告无法优化,自动改成 analyze+recreate ,速度提升到8秒左右





[解决办法]
主键会自动创建索引的,所以这张表上MESSAGE_ID做为主键,MYSQL已经创建了这个字段的唯一索引。

 SELECT Count(MESSAGE_ID) FROM blog_message 是全表/全索引遍历。 所以会花时间比较长。

navicat中直接查询表信息的话一下子就可以统计出来总共有多少条记录了。
这个是通过 information_schema.tables 中的记录得到的信息,并不一定准确,你可以直接 select * from information_schema.tables 也会很快得到相关信息。
[解决办法]

探讨

主键会自动创建索引的,所以这张表上MESSAGE_ID做为主键,MYSQL已经创建了这个字段的唯一索引。

SELECT Count(MESSAGE_ID) FROM blog_message 是全表/全索引遍历。 所以会花时间比较长。

navicat中直接查询表信息的话一下子就可以统计出来总共有多少条记录了。
这个是通过 information_schema.tables 中的……

热点排行