【发布时间】:2019-12-30 14:34:02
【问题描述】:
我有一个搜索查询,它从搜索表中查找匹配值并返回与关键字匹配的所有可能条目。我没有编写搜索,它是已经存在的东西,我们正在将它移植到另一个框架。无论如何,这不是重点。
我想要的是执行一个 MySQL 查询 (InnoDB),使用 LIMIT,并拥有所有结果中的 COUNT 供我使用分页(计算总页数) .我假设使用 LIMIT 对速度有一些影响,但在测量执行时间之后,它似乎没有太大影响(至少在这种情况下)。
问题:
对COUNT 行(仅计数)使用单独的查询所花费的时间与实际查询一样多。在这种情况下大约需要 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_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 ...
问题:
实际查询分页结果的最快方法是什么?
【问题讨论】:
标签: php mysql pdo pagination