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

大規模なデータセットを使用した1回限りのクエリでのMySQLパフォーマンスの向上

    私の勘では、unsignedintとvarchar40(特にvarchar!)を使用すると、巨大な主キーが作成され、インデックスファイルが大きくなりすぎてInnodb_buffer_pool用のRAMに収まりません。これにより、InnoDBは検索時にインデックスページをスワップするためにディスクに依存する必要があります。これは多くのディスクシークであり、CPUの作業量は多くありません。

    同様の問題に対して私が行ったことの1つは、真に自然キーと代理キーの間に何かを使用することです。実際に一意である2つのフィールド(そのうちの1つはvarcharでもあります)を取得し、アプリケーション層で固定幅のMD5ハッシュを作成し、それをキーとして使用します。はい、それはアプリにとってより多くの作業を意味しますが、任意の長さのフィールドを使用しなくなったため、インデックスファイルがはるかに小さくなります。

    または、大量のRAMを搭載したサーバーを使用して、インデックスがメモリに収まるかどうかを確認することもできますが、私は常に「ハードウェアを投入する」ことを最後の手段にするのが好きです:)




    1. SQLで数値を最も近い整数に切り上げる方法

    2. PostgreSQLのインストール中にSQLモジュールをデータベースクラスターにロードできませんでした

    3. MySQLのドット文字との単語全体のマッチング

    4. 使用量にカウントを設定