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

多数の列、すべて選択すると永遠にかかります

    InnoDBは、「ワイド」テーブルを別の方法で格納します。すべての列を1つの文字列にまとめる(さらに長さなどのオーバーヘッド)代わりに、次のことを行います。

    • 特定の行のすべての列の合計が約8KBを超えると、データの一部が別の(「オフレコ」)ストレージ領域に移動されます。
    • どの列をオフレコに移動するかは、列のサイズなどによって異なります。
    • 詳細はROW_FORMATによって異なります 選ばれました。
    • 「オフレコ」は別の16KBブロックです。
    • 後で、SELECT *を実行するとき (または少なくともオフレコ列をフェッチする)、別のディスクフェッチを実行する必要があります。

    どうすればいいですか?

    • 列が非常に多いことを考え直してください。
    • 「垂直分割」を検討してください。ここでは、選択したTEXTを含む別のテーブルがあります。 列。アプリのアクセスパターンに基づいて列のグループを選択することを提案します。
    • 通常は非常に長い列の場合は、クライアントで列を圧縮してBLOBに保存することを検討してください。 TEXTの代わりに 。ほとんどの「テキスト」は3:1に縮小します。ブロブはテキストと同じようにオフレコで送信されますが、これらの圧縮されたブロブは小さいため、こぼれる可能性は低くなります。
    • SQLでより多くの処理を実行します。すべての行を返さないようにするため、または全文を返さないようにするためなどです。クライアントに大量のテキストを盲目的に移動する場合、ネットワークとクライアントは経過時間の重要な要素になります。 SELECTだけではありません 、それ自体。



    1. RIDEを使用してMySQLに接続する方法

    2. NoSqlデータベースがリレーショナルデータベースよりも拡張性が高いのはなぜですか?それらの間でどのように選択する必要がありますか?

    3. macOSにSQLiteをインストールする方法

    4. CSVファイルをPostgreSQLにインポートするときに引用符を無視しますか?