|
|
1
12
当一个请求被服务时,php“清理”实例并释放资源和其他变量。这是通过几个步骤完成的。由于fastcgi在请求后使进程保持活动状态,因此并非所有步骤都被执行,也并非所有内存都被释放。例如,有一个由
mysql_pconnect()
,
pg_pconnect()
, ... 只要进程保持活动状态,此列表就不会在请求之间清空(可能是,取决于实际实现,但这将违背EG(持久化列表)的目的)。如果使用持久连接,则脚本可能会在上一个请求期间建立“重复使用”的连接。
是基于文本后的语句展开的吗?参数标记 . 该语句仅与通过二进制协议执行的其他缓存语句进行比较。也就是说,出于查询缓存的目的,通过二进制协议发出的语句不同于通过文本协议发出的语句。
|
|
|
2
4
您混淆了PHP/Java层上发生的事情和数据库中发生的事情。 是的,使用准备好的语句(通常)意味着执行计划由数据库本身(而不是PHP/Java层)缓存。然而,这并不意味着这总是能带来更好的性能——对此的解释需要几百页的篇幅。但是,我从您在其他地方说过的话推断,您正在使用MySQL作为DBMS,这使得讨论更加简单(IIRC没有一个存储引擎实现直方图)。通常,MySQL能够缓存足够多的模式信息,以便在没有任何磁盘I/O的情况下生成计划。OTOH,使用prepared语句意味着每个查询(present语句、present参数、retrieve结果)到DBMS的最少三次往返,而使用内联值则消除了其中的一次往返。在没有直方图索引的情况下,变量的值与优化器检测到的最优计划无关。 使用PHP、PHP-FPM或Java进行单连接、持久连接或池连接的事实与DBMS是否缓存/重用准备好的语句无关。 嗯 C |
|
|
3
2
如果您的PHP应用程序使用到数据库的连接池,并且数据库缓存准备好的语句,那么是的,缓存将在页面之间保持。如果准备好的语句缓存是由客户机库完成的,那么这就更加模糊了。
您应该知道,MySQL连接设置和拆卸实际上非常快,因此许多PHP安装不使用连接池。无论哪种方式,您都应该在服务器设置上投入时间,特别是
|
|
|
4
2
唯一正确的答案是 视情况而定 . 对于MySQL来说,预先准备好的语句是挑剔的野兽。有许多因素决定是否缓存准备好的语句。 从未 缓存在查询缓存中,如果使用>=5.1.17, 视情况而定 .
http://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html |
|
|
5
2
您可以通过在主机名前加上p:来强制mysqli创建持久连接,如php文档所示: http://www.php.net/manual/en/mysqli.persistconns.php 但是,准备好的语句总是在页面加载之间关闭,如下所述: http://dev.mysql.com/doc/refman/5.0/en/apis-php-mysqli.persistconns.html 对不起,据我所知,这件事办不到。准备好的语句用于单页加载。 |
|
|
6
-1
|
|
|
7
-1
如果希望跨多个页面加载或多个服务器进行服务器端缓存,则使用MySQL查询缓存和服务器端缓存(APC、基于文件的缓存、memcached等)。 |
|
|
Bard.Mus · 迁移后的数据库字符集环境 1 年前 |
|
Efannnnnn · 将Id数据存储到任何页面 1 年前 |
|
|
yooooo · 用于在块中删除的存储过程-LOOP未执行 1 年前 |
|
John Beasley · 更新一定数量记录的连续日期 1 年前 |
|
|
ColinM · MySQL以前的结果查询返回不正确的值 1 年前 |
|
Sergey_Z · MySQL只需无条件连接2个表和交叉连接 1 年前 |