我想优化我的分页搜索结果页面
例如,我有1亿的帖子要搜索。用户只需输入"a“。搜索所有这些都需要很长时间,因为我们使用SQL_CALC_FOUND_ROWS进行分页。
事实上,没有必要搜索所有的行(帖子),答案"1000+“对用户来说就足够了。所以我们需要在找到1000个结果后停止搜索。
我们希望向用户显示这样的信息:显示1000+结果的1-10页.第100页
如何在不失去分页功能的情况下做到这一点?
我当前的查询可能如下所示:
SELECT SQL_CALC_FOUND_ROWS xxx_posts.ID
FROM xxx_posts
WHERE 1=1
AND (((xxx_posts.post_title LIKE '%a%')
LIMIT 0, 10发布于 2022-06-28 05:31:36
你的例子太冒险了,不可能加快速度。然而,在一般情况下..。
SELECT id
FROM xxx_posts
WHERE ...
LIMIT 1000, 1;如果您有一行,那么至少有1000行。
除非索引可以处理GROUP BY和那些子句,否则不要使用WHERE或ORDER BY。否则,它们将需要获取所有行,然后在进入LIMIT之前进行排序。
你的例子很危险..。使用带有初始通配符的LIKE不能使用索引。如果没有1000+匹配行,则检查整个表中的每个title,而不满足LIMIT 1000, 1。什么都救不了!
你能使用FULLTEXT索引吗?
还请参阅MariaDB的设置,以限制单个语句的执行时间。
https://stackoverflow.com/questions/72780382
复制相似问题