我在试着改变我的想法 SELECT
查询到的更快版本 SELECT
包括 JOIN
,我在网上找到的。
这是我的密码:
$stmt->prepare("SELECT * FROM books WHERE person_id = :person_id ORDER BY id DESC LIMIT 5, 10");
转换为:
SELECT l.id, value, LENGTH(stuffing) AS len
FROM (
SELECT id
FROM t_limit
ORDER BY
id
LIMIT 150000, 10
) o
JOIN t_limit l
ON l.id = o.id
ORDER BY
l.id
我在网上找到了那个代码(最后一段代码)。它应该有助于性能时,做 OFFSET
以及 LIMIT
. 不管怎样。。。以下是我尝试的:
$stmt->prepare("SELECT * FROM (SELECT id FROM books WHERE person_id = :person_id ORDER BY id DESC LIMIT 5, 10) o WHERE person_id = :person_id JOIN books l ON l.id = o.id ORDER BY l.id");
但它似乎不起作用。
任何帮助都将不胜感激!
3条答案
按热度按时间jm2pwxwz1#
我在网上找到了那个代码。它应该有助于性能时,做抵消和限制。
你在哪儿听到的?您引用的语句似乎非常特定于特定的数据库模式,不适用于您的情况。算了吧。
从目前的情况来看,您当前使用的sql语句已经是最佳的了。如果它执行得不充分,则可能需要在上创建索引
books (person_id, id)
.j2qf4p5b2#
如果有人想知道,我已经修好了。我把
WHERE
条款放错地方了。这是现在的固定版本:
wdebmtf23#
下面有两篇文章介绍seek方法:
以及
看起来更适合你的工作。我仍然大胆猜测这是一个索引问题,一个解释会有帮助。