分页MYSQL计数与PHP计数和数组_切片
我有一个搜索查询,它从搜索表中查找匹配的值,并返回与关键字匹配的所有可能条目。我没有编写搜索,它已经存在,我们正在将它移植到另一个框架。无论如何,这不是重点 我想要的是使用分页MYSQL计数与PHP计数和数组_切片,php,mysql,pdo,pagination,Php,Mysql,Pdo,Pagination,我有一个搜索查询,它从搜索表中查找匹配的值,并返回与关键字匹配的所有可能条目。我没有编写搜索,它已经存在,我们正在将它移植到另一个框架。无论如何,这不是重点 我想要的是使用LIMIT执行一个MySQL查询(InnoDB),并对分页的所有结果进行COUNT(计算总页数)。我假设使用LIMIT对速度有一些影响,但在测量执行时间后,它似乎没有太大影响(至少在本例中是这样) 问题: 使用单独的查询对行进行计数与实际查询花费的时间相同。在本例中,大约11秒,因此整个执行大约为22秒 // Fetch Co
LIMIT
执行一个MySQL查询(InnoDB),并对分页的所有结果进行COUNT
(计算总页数)。我假设使用LIMIT
对速度有一些影响,但在测量执行时间后,它似乎没有太大影响(至少在本例中是这样)
问题:
使用单独的查询对行进行计数
与实际查询花费的时间相同。在本例中,大约11秒,因此整个执行大约为22秒
// Fetch Count approximately 11 seconds
SELECT COUNT(id) FROM table WHERE ...
// Fetch All approximately 11 seconds
SELECT id, name FROM table WHERE ...
我使用的另一种方法是不使用LIMIT
进行搜索,然后使用PHP
自己的count()
函数获取我得到的结果数,然后使用array\u slice()
限制页面的条目数。事实证明,这样做的速度更快,因为查询耗时约12秒,PHP
只需几分之一秒。所以大约是一半
// Fetch All approximately 11-12 seconds
$results = SELECT id, name FROM table WHERE ...
// PHP count and slice took a fraction of a second
$count = count($results);
$results = array_slice($results, $page, $limit);
我还尝试在第一个LIMIT
查询中使用COUNT
,这样我就不必对它使用单独的查询,但它似乎是PDO
自己的fetchAll
在每个数组项中返回可变的结果。我得到的是2,1,1,1
SELECT COUNT(id) as `count`, id, name FROM table WHERE ...
问题:
实际查询分页结果的最快方法是什么?您可以使用结果和结果计数?第二个选项根本不是选项
另一方面,11秒仍然是绝对不能接受的。因此,为了使代码正确,您必须优化搜索查询。这应该是你的目标和关注点。嗨,我能问一下哪种方法最好?我现在正在研究这个问题,并试图找到加快速度的最佳方法 我目前正在使用
// Fetch All Rows
$results = SELECT id, name FROM table WHERE ...
// PHP count and slice took a fraction of a second
$count = count($results);
$results = array_slice($results, $page, $limit);
我无法了解array_slice的性能,因此不确定它是否是最好的方法,或者是否应该恢复使用,尤其是对于大型数据集
// Fetch Count of all rows for pagination
SELECT COUNT(id) FROM table WHERE ...
// Fetch the require rows
SELECT id, name FROM table WHERE ...
非常感谢。你完全正确。正如我在顶部所说的,搜索不是我们做的,但我优化了它,首先在ID中搜索我需要在另一个表中搜索的条目(从搜索表中),因为它们以前是通过左连接搜索的,然后我只是在WHERE子句中添加了这些ID。执行时间降至1/10。