テーブルから上位 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)
一般的な使用例のように思えますが、通常はどのように効率的に行われるのでしょうか?