Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SELECT SQL_CALC_FOUND_ROWS Zapytanie bardzo wolne, większe niż 250000 rekordów

Na tym blogu jest dobry opis:https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/

Demonstracja pokazuje, że tak, użycie SQL_CALC_FOUND_ROWS jest bardzo złe dla wydajności, gdy używasz go na dużym stole.

Często lepiej jest uruchomić dwa zapytania oddzielnie:

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

Nawiasem mówiąc, nie jest to związane z problemem SQL_CALC_FOUND_ROWS, ale zastanawiam się, dlaczego dołączasz do main_members stół. Nie pobierasz z niego żadnych kolumn. LEFT JOIN oznacza, że ​​nie będzie ograniczać rzędów. Jeśli mogę wywnioskować relację między tabelami z nazw kolumn, w main_members może być tylko jeden wiersz dla każdego wiersza w main_articles , więc złączenie również nie zwiększy liczby wierszy. Więc tak naprawdę nie ma sensu robić tego łączenia.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Szyfruj za pomocą PHP Mcrypt i odszyfruj za pomocą MySQL aes_decrypt?

  2. Używasz słów kluczowych MySQL w zapytaniu?

  3. Jak zdefiniować liczbę całkowitą bez znaku w SQLAlchemy?

  4. Wypełnić JFreechart TimeSeriesCollection z Mysql DB?

  5. Problemy z wyświetlaniem japońskich znaków przy użyciu PHP i MySQL