PHP-缓存MySQL查询并定期更新
在我的欢迎页面中,我想显示使用此查询注册的用户总数:PHP-缓存MySQL查询并定期更新,php,mysql,performance,caching,Php,Mysql,Performance,Caching,在我的欢迎页面中,我想显示使用此查询注册的用户总数: SELECT COUNT(*) FROM USERS 每次用户请求“欢迎”页面时进行计数(*)查询是不是一个坏主意 最好缓存此查询的结果,然后将此缓存的值显示在欢迎页面上,例如,每10分钟更新一次该值 谢谢 在MyISAM上,该值已被缓存。 因此,您无需再次缓存该值。在MyISAM上,该值已被缓存。 因此,您不需要再次缓存它。如果您不希望计数发生剧烈变化,或者不会以真正影响每个用户的方式发生变化,那么您可以通过将每个用户的计数(*)存储在$
SELECT COUNT(*) FROM USERS
每次用户请求“欢迎”页面时进行计数(*)查询是不是一个坏主意
最好缓存此查询的结果,然后将此缓存的值显示在欢迎页面上,例如,每10分钟更新一次该值
谢谢 在MyISAM上,该值已被缓存。
因此,您无需再次缓存该值。在MyISAM上,该值已被缓存。
因此,您不需要再次缓存它。如果您不希望计数发生剧烈变化,或者不会以真正影响每个用户的方式发生变化,那么您可以通过将每个用户的
计数(*)存储在$\u会话中来体验真正的节约。然后每个人只请求一次。这实际上是一个数据的及时性对用户有多重要的问题,以及它是否真的给您带来了问题
也就是说,如果它当前正在按您需要的方式进行扩展,那么每次调用数据库都不会有什么坏处。如果你开始有可伸缩性的问题,你可以认为这是一个可能采取的行动。 如果你不希望计数急剧变化,或者以一种真正影响每个用户的方式,你可以通过在每个用户的<代码> $$Sudio中存储<代码>计数(*)< /代码>来真正节省。然后每个人只请求一次。这实际上是一个数据的及时性对用户有多重要的问题,以及它是否真的给您带来了问题
也就是说,如果它当前正在按您需要的方式进行扩展,那么每次调用数据库都不会有什么坏处。如果你开始有可伸缩性的问题,你可以认为这是一个可能采取的行动。 < P>我认为一个好主意也是把注册用户的数量存储到你的站点(或者论坛帖子的数量,博客条目,无论你需要什么号码,代码>计数(*)< /代码>检索。作为单独表中的计数器,每当用户从网站重新注册自己/取消自己时(例如使用触发器),递增-递减计数器
COUNT(*)
查询可能非常繁重,通过这种方式,您可以从计数器表中选择计数器,而不是COUNT(*)
这样做非常简单
编辑-有关COUNT()查询的一些信息
摘自高性能mysql第二版
版本
优化COUNT()查询
COUNT()聚合函数和
如何优化使用它的查询是
可能是前十名中最
MySQL中被误解的主题。你可以
进行网络搜索并查找更多信息
关于这个话题的错误信息比我们想象的要多
想一想。在我们到达之前
在优化方面,重要的是
你知道COUNT()到底是什么吗
是的
COUNT()的作用是什么
COUNT()是一个特殊的函数
它以两种截然不同的方式工作:it
对值和行进行计数。一个值就是一个值
非NULL表达式(NULL是
缺少值)。如果指定
列名称或内部的其他表达式
括号中的COUNT()表示如何计数
很多时候,这个表达有一个
价值这让很多人感到困惑
人,部分是因为价值观和
空值是令人困惑的。如果你需要
了解这在SQL中是如何工作的,我们
推荐一本关于SQL的好书
基本原理(互联网并非如此
这必然是一个很好的准确来源
有关此主题的信息。)
COUNT()的另一种形式是
统计表中的行数
结果。这就是MySQL在
它知道这个词的意思
括号永远不能为空。这个
最明显的例子是COUNT(*),
这是计数的一种特殊形式()
这不会扩展*通配符
进入中的列的完整列表
表,正如您所料;相反
它完全忽略列,并且
计算行数。最常见的
我们看到的错误是指定列
当您选择时,括号内的名称
我想数数行。当你想的时候
知道结果中的行数,
您应该始终使用COUNT(*)。这
清楚地传达你的意图
并避免性能不佳
关于MyISAM的神话
一个常见的误解是MyISAM
计数速度非常快()
查询。它很快,但只会持续一段时间
非常特殊的情况:COUNT()不带
WHERE子句,它只计算
整个表中的行数。
MySQL可以对此进行优化,因为
存储引擎总是知道怎么做
表中有许多行。如果MySQL
知道col永远不能为NULL,它可以
还要优化计数(col)表达式
通过将其转换为COUNT()
内部。MyISAM没有任何
神奇的速度优化
当查询具有
WHERE子句,或更一般的
计算值而不是
排。它可能比其他的更快
给定查询的存储引擎,或
可能不是。这取决于很多
各种因素
简单优化
你有时可以用MyISAM的
COUNT()优化到您的
当你想数一数的时候,你的优势
但只有极少数行
索引良好。以下
示例使用标准世界
数据库,以显示如何
有效地找到城市的数量
其ID大于5。你可以
按如下方式编写此查询:mysql>
从world.City WHERE中选择COUNT()
ID>5;如果您使用
显示状态,您将看到它正在扫描
4079行。如果你否定了
条件并减去
ID小于或等于的城市
等于总数量的5
城市,你可以减少到五个
行:mysql>选择(选择计数()
来自world.City)-COUNT()
->来自世界。我的城市
选择总和(如果(颜色='蓝色',1,0))
蓝色,总和(如果(颜色='红色',1,0))
->如项目中的红色;这是另一个?