您的位置:首页 > 数据库 > MySQL

mysql 之limit 的时候sending data 过长

2015-09-30 00:53 627 查看
这几天使用lucene在索引数据库记录,数据库里有1w左右的记录,其中最长的content字段,为text,当从数据库里通过分页查数据的时候使用一下语句

select * from article limit ?,?

当limit 3000,60 开始 数据基本要3s的样子,当到8000的时候,真的有蛮慢,有时候要37s,通过mysql的性能分析得知mysql的主要时间都花在sending data上了

超过3000就会这样,使用索引第一次也会这样,当加大缓存时候第二次使用相同的查询会很快,不过随便改个条件就又很慢了。

当换一个策略,select * from article where id > 3000 limit 1,60 又非常快,

如果这样

SELECT * from article t ORDER BY t.id LIMIT 7000,60

用explain是使用索引的,但从上面可以得出,这条语句只有在排序那使用索引,也就是说,查询实际上 还是全表扫描。

那这样,换一种方式:select t.id from article t.id limit 7000,60

然后 select t.* from article t where t.id in (...) 这些id中,然后用explain

1 SIMPLE
t const
PRIMARY PRIMARY4
const1

Primary说明使用了索引,这样就很快了

这里介绍一下mysql的profile性能分析

打开profile:

set profiling =1

可以查询最近执行的sql语句:

show profiles

根据queryid 查看具体的query

show profile for query 124
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: