sql >> データベース >  >> RDS >> Mysql

SELECTSQL_CALC_FOUND_ROWS250000レコードを超える非常に遅いクエリ

    このブログには適切な説明があります: 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の各行 、したがって、結合によって行数も増えません。したがって、この参加を行う目的は実際にはありません。




    1. WAMPでPHPMyAdminの失われたMySQLパスワードへのアクセスを回復する

    2. (+)mysqlの外部結合の構文

    3. Oracleで可能な最大の日付を取得するにはどうすればよいですか?

    4. MySQL InnoDB SELECT ... LIMIT 1 FOR UPDATE Vs UPDATE ... LIMIT 1