mysql - 使用大表200k行

时间:2016-11-15 03:59:23

标签: php mysql

我使用此代码从mysql tabe生成html表。表有200k行。



$view->ach = $db->Query("SELECT from_unixtime(`date`), `aav_id`, `aav_domain`, `aav_word`, `aav_referer`, `aav_ip`, `aav_country` 
FROM aav_views 
where aav_user_id=$USER_ID
ORDER BY date DESC
");




但它没有用。网络浏览器说

"页面无效 www.mysite.com目前无法处理此请求。 HTTP ERROR 500"

(不是500内部服务器错误)

我像这样添加sql查询的限制



$view->ach = $db->Query("SELECT from_unixtime(`date`), `aav_id`, `aav_domain`, `aav_word`, `aav_referer`, `aav_ip`, `aav_country` 
FROM aav_views 
where aav_user_id=$USER_ID
ORDER BY date DESC
LIMIT 1000
");




现在它工作正常。但我需要无限制地使用。我需要查询所有200k行

1 个答案:

答案 0 :(得分:1)

从MySQL处理如此大的结果集的方法是使用名为 pagination 的东西。使用分页,您一次只能检索记录100或1000。这消除了使用过多信息导致Web服务器或网页崩溃的问题。

MySQL有两个非常适合处理此问题的关键字。您已经知道的第一个LIMIT,它控制结果集中显示的总记录数。第二个是OFFSET,它指定结果集中开始记录的位置。

举个例子,如果你想从表中返回第二个100条记录,你可以发出以下查询:

SELECT from_unixtime(date), aav_id, aav_domain, aav_word, aav_referer, aav_ip, aav_country
FROM aav_views 
where aav_user_id=$USER_ID
ORDER BY date DESC
LIMIT 100 OFFSET 100

通常,用户通过在包含查询结果的UI中进行分页来控制偏移量。