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

filesortを使用してMySQLの日時列で並べ替える

    (public, date)に複合インデックスが必要です

    このように、MySQL publicでフィルタリングします dateで並べ替えます 。

    EXPLAINから (public, date)に複合インデックスがないようです 。

    代わりに、publicに2つの異なるインデックスがあります およびdate 。少なくとも、それが彼らの名前IDX_PUBLIC およびDATE 教えてください。

    更新:

    あなたはpublic 列はBITではありません 、BINARY(1)です 。これは文字タイプであり、文字比較を使用します。

    整数と文字を比較する場合、MySQL 後者を前者に変換しますが、その逆ではありません。

    これらのクエリは異なる結果を返します:

    CREATE TABLE t_binary (val BINARY(2) NOT NULL);
    
    INSERT
    INTO    t_binary
    VALUES
    (1),
    (2),
    (3),
    (10);
    
    SELECT  *
    FROM    t_binary
    WHERE   val <= 10;
    
    ---
    1
    2
    3
    10
    
    SELECT  *
    FROM    t_binary
    WHERE   val <= '10';
    ---
    1
    10
    

    publicを変更する bitとなる列 または、クエリを次のように書き直します:

    SELECT  c.*
    FROM    Cars c
    WHERE   c.PUBLIC = '1'
    ORDER BY 
            DATE DESC
    

    、 私。 e。文字を整数ではなく文字と比較します。



    1. 大規模なMySQLデータベースの移動とバックアップ

    2. PostgreSQLストリーミングレプリケーション入門

    3. 2つのJson応答Jsonオブジェクトと配列をフェッチする方法

    4. Postgresql集約配列