どのMySQLテーブルが最も多くのスペースを占めているかを確認する方法
データベースのバックアップは、世界のすべての物質を消費するまでますます大きくなり続けるものの一つです。リアリティテレビとは異なり、データベース内のアイテムを簡単に削除してバックアップを小さくすることができます。でも、何を削除すればいいのでしょうか?
MySQLは、データベースとテーブルに関するメタ情報をinformation_schemaデータベースに保存しており、テーブルに関する情報はTABLESテーブルに保存されています。したがって、私たちがやるべきことは、情報を検索するためのクエリを実行することだけです。
うーん。もっと良いクエリを実行する必要があるかもしれません。
だから、data_length列は実際にテーブルに含まれているデータの量を示しているので、これを含めてソートすれば、より良い結果が得られるかもしれません...ふむ...これはバイト単位です。さて、もう遊んでいられません。
MySQLには、大量のデータが保存される2つの場所があります: テーブルとインデックスです。あなたが100万件のレコードを保存するテーブルを持っている場合でも、もしその多くのカラムにわたってたくさんのインデックスを持っていると、そのデータは重複し、異なる方法で整列され、そのインデックスごとに保存されなければなりません。
したがって、実際のテーブルサイズを取得するには、インデックスの長さを含める必要があります。そして、せっかくなので、バイトからMBに変換してもいいでしょう。ですので、こちらはサーバー上のすべてのデータベースのトップ20テーブルを取得するためのより良いクエリです。
select table_schema as db,table_name, round((data_length+index_length) / 1048576,1) as size from information_schema.tables order by data_length+index_length desc limit 20;これにより、次のような出力が得られます。
インデックスサイズとは別にテーブルサイズを確認したい場合は、代わりに次のようなクエリを使用できます:
select table_schema as db,table_name, round((data_length) / 1048576,1) as tablesize,round((index_length) / 1048576,1) as indexsize from information_schema.tables order by data_length desc limit 20;ご覧のように、サーバー上のデータベースのサイズを縮小しようとしている場合、インデックスを確認する価値があります。インデックスは非常に大きくなる可能性があります。しかし... 単に大きいからといってインデックスを削除しないでください -- 特に大規模なデータベースに対するクエリを迅速化するために、インデックスは非常に重要です。
インデックスはデータベースのバックアップには含まれません。
