Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-缓存MySQL查询并定期更新_Php_Mysql_Performance_Caching - Fatal编程技术网

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)) ->如项目中的红色;这是另一个?