gpt4 book ai didi

php - SELECT SQL_CALC_FOUND_ROWS 查询超过 250000 条记录非常慢

转载 作者:行者123 更新时间:2023-11-29 06:33:57 25 4
gpt4 key购买 nike

当我们的表记录少于 150K 时,此查询工作正常,但因为它工作不正常且非常慢 -

SELECT SQL_CALC_FOUND_ROWS main_article.* 
FROM main_articles
LEFT JOIN main_members
ON article_mem_id=member_id
WHERE `article_type`='2'
ORDER BY article_id
DESC LIMIT 0,20

如何改进我的查询?

最佳答案

这个博客中有一个很好的描述:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

演示表明,是的,在大型表上使用 SQL_CALC_FOUND_ROWS 对性能非常不利。

通常最好分别运行两个查询:

/* no need to do the join in this case, because it won't affect the count */
SELECT COUNT(*)
FROM main_articles
WHERE `article_type`='2'

SELECT main_article.*
FROM main_articles
LEFT JOIN main_members
ON article_mem_id=member_id
WHERE `article_type`='2'
ORDER BY article_id
DESC LIMIT 0,20

顺便说一下,这与 SQL_CALC_FOUND_ROWS 问题无关,但我想知道您为什么要加入 main_members 表。您没有从中获取任何列。 LEFT JOIN 意味着它不会限制行。如果我可以从列名推断出表关系,main_articles 中的每一行在main_members 中只能有一行,因此连接不会增加行要么。所以做这个连接真的没有任何意义。

关于php - SELECT SQL_CALC_FOUND_ROWS 查询超过 250000 条记录非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26163821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com