このブログには適切な説明があります: https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
デモでは、はい、SQL_CALC_FOUND_ROWSを使用すると、大きなテーブルで使用する場合のパフォーマンスが非常に悪くなることが示されています。
多くの場合、2つのクエリを別々に実行することをお勧めします:
/* 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_members
には1行しか存在できません。 main_articles
の各行 、したがって、結合によって行数も増えません。したがって、この参加を行う目的は実際にはありません。