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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值