limit查询本身大量伴随order by处理,因此常常会是用filesort,因此造成大量io问题。
使用limit语句时,要考虑io问题可否进一步优化。
1:44显示,order by 操作中使用了表扫描的操作(type:all),产生大量io问题。(尽量用少的读写实现问题的解决)
优化方法步骤:
1.使用有索引的列或者逐渐进行order by 操作;(优化前是order by title非主键,优化后是order by film_id,是主键);
2.偏移量(翻页的扫描数据量会随着偏移量增加而增加)优化:记录上次返回的主键,在下次查询时使用主键过滤(where 主键从句);如:
偏移量是55,一页是5行数据, where film_id>55 and film_id<=60,则限定了从第56行查起,查到60行为止,从而大大降低了数据的扫描io操作;
这样直接可以避免扫描过多的记录。
其实也是在了解了limit执行方式之后,在不违反limit语句后台执行方式的逻辑下,对limit的操作进行了sql语句的限制,从而优化limit的io性能。