我正在寻找关于如何处理这个特定问题的一些建议。
我有一个页面,根据查询中带有限制语句的特定条件,将50个数据库行返回到php页面。
问题是,我需要从完整查询中提取统计信息。
基本上,我需要告诉用户数据库中有10000个条目,并且说其中有6000个是这个,其中3000个是这个,但只显示前50个。
我的php代码不准确报告数字,因为它基于停止在50的查询。
我正试图找出解决这个问题的最佳方法。
我认为出于性能原因运行2个查询并不明智。对于性能而言,运行计数查询会更具成本效益吗?
或者我应该运行完整查询,但只是通过打破while循环将输出限制为50?
如何最好地处理? 感谢。
答案 0 :(得分: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
答案 1 :(得分:2)
要计算:
SELECT COUNT(*) FROM table WHERE criteria
获取50条记录
SELECT columns FROM table WHERE criteria LIMIT 0, 50
答案 2 :(得分: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个而扔掉其余的,这就贵了。
答案 3 :(得分:0)
如果你只是特定creteria的计数,那么我肯定会运行一个单独的计数查询,否则如果你需要更多的数字,你应该考虑创建一个包含你的有用数据的视图,你可以运行你的最终查询,计数和50个。
答案 4 :(得分:0)
创建仅包含统计数据的视图表
Create view name as "query that you want"
然后对于统计数据在视图表上运行它们因为它更快并且表将自动对其进行自我更新
如果你有100k行并且一直更新,写,读,我会建议你创建2个表1普通用于更新/插入/删除和anoter视图表用于读取
你可以在这里找到更多信息 http://dev.mysql.com/doc/refman/5.0/en/create-view.html
答案 5 :(得分:0)
要获取数据库中所有行的计数,请以:
开头SELECT *, Count(*) AS Count
FROM tablename
然后,您可以使用WHERE子句进一步限制并返回其他条件,例如:
WHERE widgets > 10