2 ezhishui ezhishui 于 2016.04.15 11:29 提问

sql排序分页 如果有新数据插入

sql排序分页 如果有新数据插入并且排序在前面,那取第二页的时候就会有重复数据,而且新插入的数据展示不出来了,怎么解决呢?

各位可能没理解我意思:
比如说现在数据库里面几千万数据,还是实时插入的数据,我想排序后分页取,比如说第一次通过代码给数据库传参取第一页,取100条,

1、这个过程数据库是把所有数据几千万条全部load到内存中排序,然后进行分页,然后取出前100条吗?

2、那第二次,还会再load所有数据一次重新排一次序,再取出101-200之间的吗?
这样岂不是很费内存,效率低下。

3、如果实时有新的数据插入,比如说应该排在前100条,而第二次去取得时候,那第一次的最后一条数据岂不是又在第二页中又取一次。

6个回答

Goskalrie
Goskalrie   2016.04.16 00:53
已采纳

数据量很大,一次全部加载是不可能的。考虑两种极端情况,第一种新插入的数据在所有排序中为第一条数据,这种情况可以插入数据后重新加载前100,刷新一次局部页面。第二种情况是新插入的数据在所有排序中为最后一条,这种情况直接插入就好了,页面无需重新加载数据。对于是否应该重新加载页面,只需要将新插入的数据和已经加载进来的数据中的最后一条进行比较就可以,所执行的操作并不多。

m000000l
m000000l   2016.04.15 11:44

先插入再排序不可以吗

poisions
poisions   2016.04.15 11:59

如果对实时性要求不是很高,可以在sql中按创建时间排序再分页获取数据,利用ajax的特效滚动刷新

qq_17044277
qq_17044277   2016.04.15 12:29

使用倒序排列,分页时,把数据写入session

u013321534
u013321534   2016.04.15 14:03

load出几千万数据,你的服务一定会挂。分页的话可以在数据库中排好序了,根据传入分页参数,取出相应的0-100条或者101-200条

ezhishui
ezhishui 不是我load,那数据库排序的时候不是load所有数据到内存中,然后排序吗?
一年多之前 回复
o527883184
o527883184   2016.04.16 12:50

分页主要目的就是避免一次全部加载,降低执行效率。
你可以查查 每次只加载一页 这样 才是真正的使用分页

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!