Discuss / SQL / 请教

请教

Topic source

星晨丶7758

#1 Created at ... [Delete] [Delete and Lock User]

廖老师,随着N的增大,查询速度越来越慢这个问题有没有好的办法解决。

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

有的

怎么解决呀?

廖雪峰

#4 Created at ... [Delete] [Delete and Lock User]

放弃总页数的精确计算,即不使用count

根据业务选择一个带索引的列来分页,比如id

假设每页查询100条:

第一页查询:select * from xxx where id>=0 limit 101

如果返回101条记录,说明有下一页,继续查第二页:

select * from xxx where id>=? limit 101 其中参数是上一次查询的最后一条记录的id

查到某一页返回结果数量<101,即为最后一页

即:

def getNextPage(int offsetId=0, int limit=101):
    results = execute("select * from xxx where id >= ? limit ?", offsetId, limit)
    if len(results)==limit:
        return results[:-1], results[limit-1].id # 返回100条记录+最后一条记录的id
    else:
        return results, None # 最后一页

这个应该就是类似很多APP搜索内容之后不告诉你总数,下拉继续刷新的原理吧。


  • 1

Reply