您好我正在阅读http://domasmituzas.files.wordpress.com/2011/09/mysqluc2008-mysql-web.pdf 并发现“良好的分页练习”与WHERE有关,而不是OFFSET,LIMIT
任何代码示例,说明怎么做?
答案 0 :(得分:1)
我不是sql guru。但据我所知,WHERE
子句指示在特定TABLE
上选择哪一行。这是在LIMIT
子句之前执行的。
LIMIT
子句限制SELECT
语句返回的行数。因此,此子句是在WHERE
子句之后执行的,该子句的结论是WHERE
比LIMIT
更快。
WHERE
条款的PERFORMANCE仍然取决于您如何形成条件。
这是我用于分页的内容:
SELECT *
FROM table T
WHERE T.Id > 100
LIMIT 100;
而不是使用LIMIT
/ OFFSET
。
SELECT *
FROM table T
LIMIT 100, 100;
您可以清楚地看到大表的优势。
答案 1 :(得分:1)
A better presentation可用,其中包含如何在不使用OFFSET的情况下实现分页的说明和示例。
<强>行情:强>
更大的OFFSET将增加活动数据集,MySQL必须带来 内存中永远不会返回给调用者的数据。
另一种解决方案是存储最后看到的ID。 对于下一页http://domain.com/forum?page=2&last_seen=100&dir=next,查询为:
SELECT ... WHERE id < 100 /* last_seen */ BY id ORDER BY DESC LIMIT $page_size
上一页:http://domain.com/forum?page=1&last_seen=98&dir=prev:
SELECT ... WHERE id > 98 /* last_seen */ ORDER BY id ASC LIMIT $page_size