Ada deskripsi yang bagus di blog ini:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
Demonstrasi menunjukkan bahwa ya, menggunakan SQL_CALC_FOUND_ROWS sangat buruk untuk kinerja saat Anda menggunakannya di meja besar.
Seringkali lebih baik menjalankan dua kueri secara terpisah:
/* 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
Omong-omong, ini tidak terkait dengan masalah SQL_CALC_FOUND_ROWS, tapi saya ingin tahu mengapa Anda bergabung dengan main_members
meja. Anda tidak mengambil kolom apa pun darinya. LEFT JOIN berarti tidak akan membatasi baris. Jika saya dapat menyimpulkan hubungan tabel dari nama kolom, hanya ada satu baris di main_members
untuk setiap baris di main_articles
, jadi gabungan juga tidak akan menambah jumlah baris. Jadi sebenarnya tidak ada gunanya melakukan ini.