前一段时间在写分页语句。单机的mysql一般使用:
select * from [table] limit [length] offset [offset]
这里的问题在于 offset 如果很大,那么意味着你要扫描整个表。当然如果offset很小,那这个速度还是相当快的。当然替换方案是使用where子句而不使用offset.
select * from [table] where column > [pre_column_value] limit [length]
然而对于使用主键做了Range分区,hash分区,或者使用了mysql搭建的分布式数据库。这里的问题在于分区的索引是局部的,而不是全局的。对于limit 和offset操作不光要获取到更多的数据,而言看起来也不是很安全。所以建议还是使用对主键进行order by。SQL语句是这样:
select * from [table] where key_column > [pre_key_column_value] order by key_column limit [length]
这样才是最保险的.