问题描述
- sql排序分页 如果有新数据插入
-
sql排序分页 如果有新数据插入并且排序在前面,那取第二页的时候就会有重复数据,而且新插入的数据展示不出来了,怎么解决呢?各位可能没理解我意思:
比如说现在数据库里面几千万数据,还是实时插入的数据,我想排序后分页取,比如说第一次通过代码给数据库传参取第一页,取100条,1、这个过程数据库是把所有数据几千万条全部load到内存中排序,然后进行分页,然后取出前100条吗?
2、那第二次,还会再load所有数据一次重新排一次序,再取出101-200之间的吗?
这样岂不是很费内存,效率低下。3、如果实时有新的数据插入,比如说应该排在前100条,而第二次去取得时候,那第一次的最后一条数据岂不是又在第二页中又取一次。
解决方案
数据量很大,一次全部加载是不可能的。考虑两种极端情况,第一种新插入的数据在所有排序中为第一条数据,这种情况可以插入数据后重新加载前100,刷新一次局部页面。第二种情况是新插入的数据在所有排序中为最后一条,这种情况直接插入就好了,页面无需重新加载数据。对于是否应该重新加载页面,只需要将新插入的数据和已经加载进来的数据中的最后一条进行比较就可以,所执行的操作并不多。
解决方案二:
先插入再排序不可以吗
解决方案三:
如果对实时性要求不是很高,可以在sql中按创建时间排序再分页获取数据,利用ajax的特效滚动刷新
解决方案四:
使用倒序排列,分页时,把数据写入session
解决方案五:
load出几千万数据,你的服务一定会挂。分页的话可以在数据库中排好序了,根据传入分页参数,取出相应的0-100条或者101-200条
解决方案六:
分页主要目的就是避免一次全部加载,降低执行效率。
你可以查查 每次只加载一页 这样 才是真正的使用分页
时间: 2024-12-24 21:06:06