1

我正在使用 will_paginate 从表中获取前 10-20 行,但我发现它产生的简单查询是扫描整个表。

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 子句和索引,我相信它会有所不同,但这只是在网站的首页上显示最新的帖子。我确实在这里找到了一两个建议添加索引的帖子,但我看不出它如何帮助表扫描。

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

0

要求数据库在ORDER BY created_at DESC整个表中搜索最大值。

为了加快搜索速度,您需要在created_at列上建立索引。

于 2013-10-25T07:18:27.047 回答