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

MySQL/MariaDBテーブルを最適化する方法

    この投稿のコマンドは、MySQLおよびMariaDBサーバーで機能します。

    データベースのメンテナンスを時々実行することをお勧めします。 1つは、テーブルを最適化することです。 2つのオプションがあります:

    1。テーブルの最適化 コマンド

    テーブルデータおよび関連するインデックスデータの物理ストレージを再編成して、ストレージスペースを削減し、テーブルにアクセスするときのI/O効率を向上させます。各テーブルに加えられる正確な変更は、そのテーブルで使用されるストレージエンジンによって異なります。

    使用方法は以下をご覧ください。

    root@web [~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 3670
    Server version: 10.1.22-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]> use roundcube
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [roundcube]> OPTIMIZE TABLE cache;
    +-----------------+----------+----------+-------------------------------------------------------------------+
    | Table           | Op       | Msg_type | Msg_text                                                          |
    +-----------------+----------+----------+-------------------------------------------------------------------+
    | roundcube.cache | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
    | roundcube.cache | optimize | status   | OK                                                                |
    +-----------------+----------+----------+-------------------------------------------------------------------+
    2 rows in set (0.04 sec)
    
    MariaDB [roundcube]> quit
    Bye
    root@web [~]#
    

    同じデータベースの複数のテーブルに対してコマンドを実行する場合は、次を使用します。

    OPTIMIZE TABLE table1,table2,table3;

    OPTIMIZE TABLEは、InnoDB、MyISAM、およびARCHIVEテーブルで機能します。

    2。 mysqlcheck コマンド

    mysqlcheckクライアントはテーブルのメンテナンスを実行します。テーブルのチェック、修復、最適化、または分析を行います。

    1つのテーブルをチェックするには、次を使用します。 mysqlcheck db_name tbl_name
    データベースからすべてのテーブルをチェックするには: mysqlcheck –databases db_name
    サーバー上のすべてのデータベースのテーブルを確認するには: mysqlcheck –all-databases

    データベーステーブルがロックされていることに注意してください mysqlcheckの実行中。テーブルにレコードを挿入したり、テーブルからレコードを削除したりすることはできません。

    root@web [~]# mysqlcheck roundcube
    roundcube.cache                                    OK
    roundcube.cache_index                              OK
    roundcube.cache_messages                           OK
    roundcube.cache_shared                             OK
    roundcube.cache_thread                             OK
    roundcube.contactgroupmembers                      OK
    roundcube.contactgroups                            OK
    roundcube.contacts                                 OK
    roundcube.cp_schema_version                        OK
    roundcube.dictionary                               OK
    roundcube.identities                               OK
    roundcube.searches                                 OK
    roundcube.session                                  OK
    roundcube.system                                   OK
    roundcube.users                                    OK
    root@web [~]# 

    データベースを最適化するには、次を使用します。

    root@web [~]# mysqlcheck -o roundcube
    roundcube.cache
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.cache_index
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.cache_messages
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.cache_shared
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.cache_thread
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.contactgroupmembers
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.contactgroups
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.contacts
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.cp_schema_version                        Table is already up to date
    roundcube.dictionary
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.identities
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.searches
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.session
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.system
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    roundcube.users
    note     : Table does not support optimize, doing recreate + analyze instead
    status   : OK
    root@web [~]#

    サーバーですべてのデータベースを最適化するには:

    root@web [~]# mysqlcheck -o -A
    

    リソース:
    OPTIMIZETABLEマニュアル
    mysqlcheckマニュアル


    1. グループSQL別の累計(Oracle)

    2. LaravelEloquentとクエリビルダー-パフォーマンスを低下させるためにeloquentを使用する理由

    3. Tablefuncを使用して複数の列をピボットする

    4. MySQL ORDER BY IN()