1

テーブルから上位 10 ~ 20 行を取得するために will_paginate を使用していますが、それが生成する単純なクエリがテーブル全体をスキャンしていることがわかりました。

sqlite> explain query plan 
SELECT "deals".* FROM "deals" ORDER BY created_at DESC LIMIT 10 OFFSET 0;
0|0|0|SCAN TABLE deals (~1000000 rows)
0|0|0|USE TEMP B-TREE FOR ORDER BY

WITH句とインデックスを使っていたら違うと思いますが、これはサイトのトップページに最新の投稿を表示しているだけです。とにかくインデックスを追加することを提案する投稿をここで1つか2つ見つけましたが、それがテーブルスキャンにどのように役立つかわかりません。

sqlite> explain query plan 
SELECT deals.id FROM deals ORDER BY id DESC LIMIT 10 OFFSET 0;
0|0|0|SCAN TABLE deals USING INTEGER PRIMARY KEY (~1000000 rows)

一般的な使用例のように思えますが、通常はどのように効率的に行われるのでしょうか?

4

1 に答える 1