我正在使用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)
这似乎是一个常见的用例,那么它通常如何有效地完成?
答案 0 :(得分:0)
ORDER BY created_at DESC
要求数据库搜索整个表中的最大值。
要加快此搜索速度,您需要created_at
列上的索引。