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

ORDER BYをidから別のインデックス付き列(LIMITが低い)に変更すると、莫大なコストがかかります

    それはインデックスの問題であることが判明しました。クエリのNULLS動作は、インデックスと一貫性がありませんでした。

    CREATE INDEX message_created_at_idx on message (created_at DESC NULLS LAST);
    
    ... ORDER BY message.created_at DESC; -- defaults to NULLS FIRST when DESC
    

    ソリューション

    インデックスまたはクエリでNULLSを指定する場合は、それらが互いに一貫していることを確認してください。

    すなわち:ASC NULLS LAST ASC NULLS LASTと一貫性があります またはDESC NULLS FIRST

    最後のNULL

    CREATE INDEX message_created_at_idx on message (created_at DESC NULLS LAST);
    
    ... ORDER BY messsage.created_at DESC NULLS LAST;
    

    NULLを最初に

    CREATE INDEX message_created_at_idx on message (created_at DESC); -- defaults to NULLS FIRST when DESC
    
    ... ORDER BY messsage.created_at DESC -- defaults to NULLS FIRST when DESC;
    

    NOT NULL

    列がNULLでない場合は、NULLを気にしないでください。

    CREATE INDEX message_created_at_idx on message (created_at DESC);
    
    ... ORDER BY messsage.created_at DESC;
    


    1. SQLを使用して各グループから最大スコアプレーヤーを取得するにはどうすればよいですか?

    2. SQLServerへのバイナリデータ型の保存

    3. SQL Server2014CTP1でのパーティションレベルのオンラインインデックス操作の調査

    4. mysql_exceptions.OperationalError:(1045、ユーザー'root' @'localhost'のアクセスが拒否されました(パスワード:YESを使用))