标签:mysql pagination
我在MySQL中有一个数据集,其中使用限制已经是一个昂贵的查询,并且找到结果的数量也是昂贵的.因此,我想避免做另一个查询来查找结果的数量.我不能使用MYSQL_CALC_FOUND_ROWS,因为限制在子查询中:
SELECT * FROM items,
(
SELECT
item_id
FROM
(etc)
WHERE
some.field=<parameter>
AND (etc)
GROUP BY (something)
ORDER BY (something_else) DESC
LIMIT 15
) subset
WHERE item.id=subset.item_id
我可以离开连接项并取消子查询,然后能够使用MYSQL_CALC_FOUND_ROWS,但这非常非常慢.我已经尝试了所有索引优化,让我们假设它是不可能的.
现在这变成了一个设计问题……当我不知道最后一页时,如何允许用户翻阅这些数据?我只知道他们是否走得太远(例如:查询没有返回结果).
解决方法:
以下是MySQL大师Baron Schwartz撰写的文章摘要:
http://www.mysqlperformanceblog.com/2008/09/24/four-ways-to-optimize-paginated-displays/
四种优化分页显示的方法
>在第一个查询中,获取并缓存所有结果.
>不要显示所有结果.甚至谷歌也不会让你看到百万分之一的结果.
>不显示总计数或其他页面的中间链接.仅显示“下一个”链接.
>估计有多少结果.再一次,谷歌这样做,没有人抱怨.
标签:mysql,pagination 来源: https://codeday.me/bug/20190827/1744125.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。