关于mysql表中有大文本limit慢的优化

问题场景:

商品表goods,里面有几个大文本字段,类型用的MediumText,表中记录28万多。分页查询时用limit,在一般PC上需要12秒左右,这个数量级的数据不应该这么慢。

原因分析:

几个大文本拖慢了查询速度,如果只查主键或数字类型的字段则很快。有人说你分页干嘛查大文本啊,原因是产品经理和设计师一致认为分页应该显示些摘要比较美观。

解决方案:

1.通用做法:每次分页查询时,都提供一下开始Id,速度很快。

至于为何要在in语句里又包了一层临时表,因为mysql语法限制在in语句不能使用limit。

ps:由于保护项目的隐私,以上查询用了星号。

问题场景: 商品表goods,里面有几个大文本字段,类型用的MediumText,表中记录28万多。分页查询时用limit,在一般PC上需要12秒左右,这个数量级的数据不应该这么慢。 原因分析: 几个大文本拖慢了查询速度,如果只查主键或数字类型的字段则很快。有人说你分页干嘛查大文本啊,原因是产品经理和设计师一致认为分页应该显示些摘要比较美观。 解决方案: 1.通用做法:每次分页查询时,都提供一下开始Id,速度很快。 select * from goods where id>65310 limit 20; 2.变通方法:先查询出一页的主键Id,然后In语句查询,速度稍慢,性能主要损耗在先查Id上; 但很方便,对于现有程序改动最小。 select * from goods where id in( select id from ( select id from goods limit 63660,20 ) tt ) 至于为何要在in语句里又包了一层临时表,因为mysql语法限制在in语句不能使用limit。 ps:由于保护项目的隐私,以上查询用了星号。
经验分享 程序员 微信小程序 职场和发展