Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分页的MySQL查询性能_Mysql - Fatal编程技术网

分页的MySQL查询性能

分页的MySQL查询性能,mysql,Mysql,好的,那么在mysql中分页的最佳实践是什么呢。让我更清楚地说明一下,假设在给定的时间内,我有2000条记录,并且有更多的记录被插入。我一次显示25个,我知道我必须使用limit来分页记录。但是我的记录总数该怎么办呢?每次用户单击请求下一个25条记录时,我都要统计记录吗。请不要直截了当地告诉我答案,而是给我指出正确的方向。谢谢 最简单的解决方案是在插入新记录时继续正常使用结果集。大概,您显示的每个页面都将使用一个类似以下内容的查询: SELECT * FROM yourTable ORDER B

好的,那么在mysql中分页的最佳实践是什么呢。让我更清楚地说明一下,假设在给定的时间内,我有2000条记录,并且有更多的记录被插入。我一次显示25个,我知道我必须使用limit来分页记录。但是我的记录总数该怎么办呢?每次用户单击请求下一个25条记录时,我都要统计记录吗。请不要直截了当地告诉我答案,而是给我指出正确的方向。谢谢

最简单的解决方案是在插入新记录时继续正常使用结果集。大概,您显示的每个页面都将使用一个类似以下内容的查询:

SELECT *
FROM yourTable
ORDER BY someCol
LIMIT 25
OFFSET 100
当用户来回翻页时,如果有新的数据进入,页面可能会改变原来的内容。从逻辑的角度来看,这并不坏。例如,如果您有一个按字母顺序排列的产品列表,并且出现了一个新产品,那么用户将以一种相当好的方式收到此信息

至于计数,只要有数据支持添加新页面,代码就可以移动到下一页。添加新记录可能意味着需要更多的页面来覆盖整个表,但这不应影响用于确定何时停止允许页面的逻辑

如果表中有一个日期或时间戳列,表示添加记录的时间,那么实际上可以将整个结果集限制为一个快照。在这种情况下,您可以阻止新数据进入给定会话。

3建议 1.仅刷新数据网格,同时通过ajax(或)单击next按钮,在会话中存储所选搜索参数的计数。 2.使用先进的memcache,可以在所有用户之间共享。根据过滤器参数生成唯一密钥并保留计数。这样你就不会访问数据库了。添加新记录时,需要清除现有的memcache键。这需要运行memache。
3.创建一个索引,如果你点击db单独获取计数。不会对性能有太大影响。

谢谢!但我更关心的是表现。我应该每次都读书吗?大公司是如何做到这一点的。我不认为每次用户移动到下一页时,它们都会被计算在内@乔纳森,你根本不需要数。只需选择页面大小并尝试查询。当你什么也没有得到时,你就知道你已经超出了桌子的大小。无论如何,正如您所指出的,表的大小是不断变化的。这是真的,但我如何向用户显示他们正在查看的页面的大小?为此,您可以进行计数查询,但您可能只需要在开始时进行计数查询。