转载:http://zengyouyuan.iteye.com/blog/761941
转载:http://zengyouyuan.iteye.com/blog/754866
前段时间发博,Sybase使用rank() over(order by id)ret的方式分页,这种方式在数据量达到40W条的时候很耗时,大概5S的时间,当达到千万条的时候,查询一次大概是1分40秒,这就远远不符合项目要求了
对于这种方式,瓶颈可能是出在排序部分,当排序的唯一字段是varchar类型的时候更加明显
现在有种新的方式,就是利用rowid。
如:select a.* from table_name a where rowid(a) >=1 and rowid(a)<11
经测试,在同一张表中,1500W的数据量,每次查询时间都在200ms以内
但是这个函数只能用在真实的数据表,无法在临时表中用到;
这个rowid,是在数据插入的时候,数据库给每行数据分配的物理唯一标识,如果要页面中要用到动态排序,这个是不支持的。