mysql 之limit 的时候sending data 过长

这几天使用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

你可能感兴趣的:(mysql,profile,EXPLAIN)