sql >> Database teknologi >  >> RDS >> Mysql

SELECT SQL_CALC_FOUND_ROWS Forespørgsel meget langsom mere end 250.000 poster

Der er en god beskrivelse i denne blog:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

Demonstrationen viser, at ja, brug af SQL_CALC_FOUND_ROWS er ​​meget dårligt for ydeevnen, når du bruger det på et stort bord.

Det er ofte bedre at køre to forespørgsler separat:

/* 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

Dette er i øvrigt ikke relateret til SQL_CALC_FOUND_ROWS-problemet, men jeg undrer mig over, hvorfor du tilslutter dig main_members bord. Du henter ingen kolonner fra den. LEFT JOIN betyder, at den ikke begrænser rækkerne. Hvis jeg kan udlede tabelrelationen ud fra kolonnenavnene, kan der kun være én række i main_members for hver række i main_articles , så joinforbindelsen øger heller ikke antallet af rækker. Så der er virkelig ikke noget formål at gøre dette join.




  1. Sådan installeres SQL Server på Red Hat 8

  2. Unik nøgle i Oracle med eksempler

  3. Problemer med at åbne MDF-fil, fordi den siger SQL-fejl 5171? - Et gæsteindlæg af Andre Williams

  4. MySQL - SELECT * INTO OUTFILE LOCAL ?