1

我正在寻找有关如何处理此特定问题的一些建议。

我有一个页面,它根据特定条件将 50 个数据库行返回到 php 页面,并在查询中使用限制语句。

问题是,我需要从完整查询中提取统计信息。

基本上,我需要告诉用户数据库中有 10000 个条目,其中 6000 个是这个,3000 个是那个,但只显示前 50 个。

我的 php 代码报告的数字不准确,因为它基于停止在 50 处的查询。

我正在尝试找出处理此问题的最佳方法。

我认为出于性能原因运行 2 个查询是不明智的。改为运行计数查询是否会更具成本效益?

或者我应该运行完整的查询,但只是通过打破 while 循环将输出限制为 50?

怎么处理最好?谢谢。

4

6 回答 6

5

你可以SQL_CALC_FOUND_ROWS这样使用

SELECT `SQL_CALC_FOUND_ROWS` * FROM table_name limit 0,5;

LIMIT它在应用任何子句之前获取行数。

http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows

于 2013-03-01T05:50:46.663 回答
2

要获得计数:

SELECT COUNT(*) FROM table WHERE criteria

获取 50 条记录

SELECT columns FROM table WHERE criteria LIMIT 0, 50
于 2013-03-01T05:51:08.193 回答
0

如果您只是对特定 creteria 的计数感兴趣,那么我肯定会运行一个单独的计数查询,否则如果您需要的数量不止于此,您应该考虑创建一个包含您可以运行最终查询的有趣数据的视图,数个数和 50 个数。

于 2013-03-01T05:49:38.583 回答
0

I don't think it would be wise to run 2 queries for performance reasons. Would it be more cost effective for performance to maybe run a count query instead?

您必须运行 1 个查询才能获得完整计数,然后运行另一个查询才能获得 50 条记录数据。您永远不应该运行 1 个查询来获取所有数据,然后只显示 50 个。这就像从超市购买 1000 块巧克力然后回家然后只吃 5 块并扔掉其余的,这太昂贵了。

于 2013-03-01T05:47:31.530 回答
0

创建仅包含统计数据的视图表

Create view name as "query that you want" 

然后对于 stats 在视图表上运行它们,因为它更快,并且表会自动更新它自己

实际上,如果您有 100k 行并且一直在更新、写入、读取,我建议您创建 2 个表 1 普通用于更新/插入/删除和另一个视图表用于读取

你可以在这里找到更多信息 http://dev.mysql.com/doc/refman/5.0/en/create-view.html

于 2013-03-01T05:52:16.257 回答
0

要获取数据库中所有行的计数,请从以下开始:

SELECT *, Count(*) AS Count
FROM tablename

然后,您可以使用 WHERE 子句进一步限制和返回其他条件,例如:

WHERE widgets > 10
于 2013-03-01T05:52:48.490 回答