2013-05-27 63 views

回答

1

我没有SQL大师。但据我所知,WHERE子句表示在该特定的TABLE上要选择的行。这是在LIMIT条款之前执行的。

LIMIT子句限制了SELECT语句返回的行数。因此,该子句在WHERE子句之后执行,其得出WHERELIMIT更快的结论。

仍然WHERE子句的PERFORMANCE取决于你如何形成你的条件。

这是我使用的分页:

SELECT * 
    FROM table T 
    WHERE T.Id > 100 
    LIMIT 100; 

而不是使用LIMIT/OFFSET的。

SELECT * 
    FROM table T 
    LIMIT 100, 100; 

您可以清楚地看到大表的优点。

1

A better presentation可用,其中有解释和示例如何实现分页而不使用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 
相关问题