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

MySQLステートメントの実行には1分以上かかります

    これは、MyISAMを使用することを1分間示唆しているわけではないことに注意してください。私はそれを自分のID、最小値、最大値、およびカウントを取得するためにのみ使用します。エンジンは無視してください。

    create table ratings
    (   id int auto_increment primary key,
        thing int null
    )engine=MyISAM;
    insert ratings (thing) values (null),(null),(null),(null),(null),(null),(null),(null),(null);
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    
    insert ratings (thing) select thing from ratings;
    insert ratings (thing) select thing from ratings;
    

    現在、470万行あります

    select count(*),min(id),max(id) from ratings;
    +----------+---------+---------+
    | count(*) | min(id) | max(id) |
    +----------+---------+---------+
    |  4718592 |       1 | 4718592 |
    +----------+---------+---------+
    select * from `ratings` order by id limit 499500, 500;
    -- 1 second on a dumpy laptop
    

    explain select * from `ratings` order by id limit 499500, 500;
    +----+-------------+---------+------+---------------+------+---------+------+---------+----------------+
    | id | select_type | table   | type | possible_keys | key  | key_len | ref  | rows    | Extra          |
    +----+-------------+---------+------+---------------+------+---------+------+---------+----------------+
    |  1 | SIMPLE      | ratings | ALL  | NULL          | NULL | NULL    | NULL | 4718592 | Using filesort |
    +----+-------------+---------+------+---------------+------+---------+------+---------+----------------+
    

    explain select * from `ratings` where id>=499501 limit 500;
    +----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+
    | id | select_type | table   | type  | possible_keys | key     | key_len | ref  | rows    | Extra                 |
    +----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+
    |  1 | SIMPLE      | ratings | range | PRIMARY       | PRIMARY | 4       | NULL | 4198581 | Using index condition |
    +----+-------------+---------+-------+---------------+---------+---------+------+---------+-----------------------+
    

    話の教訓は、where句を使用することかもしれません。

    デッドロックの可能性を排除することはできません。



    1. AWS上のWindowsでのShareplex入門、パート1

    2. アップサートがPostgreSQL9.5+UPSERTのアップデートであったかどうかを確認するにはどうすればよいですか?

    3. xmlノードから値をクエリする方法は?

    4. MySQLダイナミックピボット