mysql limit分页的坑 数据库分页优化

来源:互联网 发布:汇川 4da编程 编辑:程序博客网 时间:2024/06/06 11:41

hibernate可以封装分页操作,getsession得到query后、list()前可以用query的setFrist....和setMax...方法来分页,两个方法分别传页码和单页数据量。

之前数据量小,并没有发现什么问题,但我知道终将有一天要面对查询优化的问题,果然今天就遇到了。网上人都说达到百万级后数据库查询会暴露各种性能问题,这次我在单个表达到9w数据量时查询缓慢,查询65535开始的1000条数据时勇士10-20秒,光是navicat图形化界面翻到这页就崩溃一次,可以在底端看到navicat翻页实际上执行的是

select * from '表' limit 第一条,1000

在往上看别人贴的hibernate源码,两个set分页之后在mysql方言下也是生成这样的sql语句,但大多人都说mysql的limit方便快捷,sql server和oracle表示羡慕,mysql独有;偶尔有提到的也只说limit后:一个参数为从0开始取指定数量的结果集,两个参数则从第一个参数(偏移量)开始取第二个参数数量的结果,数据多的时候使用偏移量效率高。没卵用


https://wenku.baidu.com/view/e63da30fba1aa8114431d9e9.html

这里提到索引,主键创建时会自带一个主键索引,尝试select id from 表还是那么慢。

有人提到:mysql索引在有where < > <> 之类才会使用,尝试select id from 表 where id>65535 and id<66535果然瞬间出结果,将此作为子查询外面套select * from 表 where id in()应该可行,但实际查询时id不一定连续,还是不能这样做


http://blog.csdn.net/paincupid/article/details/51835322

这个看起来提到点上了,先马克下来之后慢慢看

原创粉丝点击