我的网站上有一个搜索框,其中包括分页。
要设置分页,我必须知道匹配的数量,所以我有两个选择:
limit
),以及查询总计匹配情况的查询。array_slice
我认为解决方案#2更好,你怎么看?
答案 0 :(得分:3)
在MySQL中,您可以在查询中添加SQL_CALC_FOUND_ROWS
,然后运行SELECT FOUND_ROWS();
:
http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows
答案 1 :(得分:1)
答案实际上取决于您预期匹配的行数以及行中存储的数据大小。
传统的分页方法是使用SQL LIMIT
子句返回整个结果集的子集。如果您确实需要知道完整数量的记录(为了显示完整数量的"页面"),您还需要制作SELECT COUNT(primary_key_field) FROM table WHERE [search condition]
以获取该信息。
这通常会提供最佳结果,因为COUNT查询应该能够非常快速地执行,并且LIMIT查询将保持查询性能响应,只要您在用于排序的字段上有索引(就像您一样)始终需要ORDER BY
和LIMIT
以保证订单)。这也意味着您需要在应用程序中保留更少的内存记录。
我认为可能存在一些使用案例,其中单个查询方法可能更好(即,不会有大量潜在的行,行数据大小很小),这样您就不会有检索完整结果集的内存使用量的巨大数据传输时间。
真的,你只需要在你的应用中测试一些场景,看看什么最适合你。