Laravel + MySQL8 のマイグレーションで 降順index を設定する方法

この記事の目次
chevron_right はじめに
chevron_right 結論
chevron_right 生成されるDDL
chevron_right 参考

はじめに

みなさん、MySQL問わず index をちゃんと貼っていますか?
indexを貼ることはデータベースを使う上で必須技術です。
indexを正しく理解して使うことは大切ですね!

MySQL8から、降順indexが使えるようになりました。
これは何かというと、selectしたときに逆順にindexが貼られるというものです。

何気なしにindexを貼って理解していない人はこの説明でなんのこっちゃわかんないと思いますが、
例えばプライマリーキー(以降PK)をselectしたとき、1, 2, 3, ... と昇順で帰ってきますよね?
これはPKに昇順indexが当たっているからです。

つまりselectをしたときに、indexが使われていて、order句がなければindexの順に返ってくるということですね。

今までは昇順しか対応していなかったのですが、現在は降順indexが使えるようになりました。
なので、せっかくなので使いたいのですがLaravelでの使い方が分からなかったので調べてみました。

結論

クエリビルダではなさそうなので、一部、生のSQLを使う必要があるようです。

Laravelクエリビルダ

Schema::create('post', function (Blueprint $table) {
    $table->id('post_id');
    $table->timestamp('created_at')->useCurrent();

    $table->index([DB::raw('created_at desc')], 'idx_post_created_at');
});

生成されるDDL

create table post
(
    post_id    bigint unsigned auto_increment
        primary key,
    created_at timestamp default CURRENT_TIMESTAMP not null
)
    collate = utf8mb4_unicode_ci;

create index idx_post_created_at
    on post (created_at desc);

しっかりとdesc、降順のindexが指定されていますね!
いい感じです。

では、今回はこれで

参考

[PR] おすすめの本
この記事を書いた人
Nな人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。