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

列の順序に基づくクエリ速度

    答えは「はい」です。それは重要であり、非常に重要になる可能性がありますが、通常 あまりありません。

    すべてのI/Oはページレベルで実行されます(通常、OSに応じて2Kまたは4K)。行の列データは、ページがいっぱいになる場合を除いて、隣り合って保存されます。いっぱいになると、データは別の(通常は次の)ページに書き込まれます。

    (テーブル定義に基づいて)選択した列の間の列に必要なディスク上のデータスペースが大きいほど、選択した列のデータが(場合によっては)異なるページにある可能性が高くなります。別のページにいると、余分なI / O操作が発生する可能性があります(他のページで他の行が選択されていない場合)。最悪の場合、選択した各列が異なるページにある可能性があります。

    次に例を示します:

    create table bad_layout (
    num1 int,
    large1 varchar(4000),
    num2 int,
    large2 varchar(4000),
    num3 int,
    large3 varchar(4000)
    );
    
    create table better_layout (
    num1 int,
    num2 int,
    num3 int,
    large1 varchar(4000),
    large2 varchar(4000),
    large3 varchar(4000)
    );
    

    比較:bad_layoutからnum1、num2、num3を選択します; better_layoutからnum1、num2、num3を選択します;

    bad_layoutの場合、各num列は基本的に異なるページに配置されるため、各行には3つのi/O操作が必要になります。逆に、better_layoutの場合、num列は通常同じページにあります。

    bad_layoutクエリの実行には、約3倍の時間がかかる可能性があります。

    優れたテーブルレイアウトは、クエリのパフォーマンスに大きな違いをもたらす可能性があります。通常は一緒に選択される列を、テーブルレイアウトで互いにできるだけ近くに保つようにしてください。



    1. OracleのTRIM()関数

    2. PHPMysqlPDOのバインドされた変数の数がトークンの数と一致しません

    3. mysqldumpからダンプファイルを復元するにはどうすればよいですか?

    4. MYSQLTINYBLOBとLONGBLOB