Php 在可能的情况下,在后续查询中重用MySQL结果,这些查询的表单选择与($result)不同
我有一个非常复杂的查询,它基本上为我提供了一个主表,其中包含数据库中多个表中不同列的不同组合,称之为$query(使用PHP),$result=mysql\u查询的结果。我希望能够在后续较小的查询中重用$result,而无需再次执行真正复杂的查询 类似于从$result中选择不同的列,其中xxx和xxx以及xxx。如果我真的为$result in输入字符串,它会起作用,但是如果它不必超时执行整个复杂的查询,它似乎会更有效。这可能吗?您可以:Php 在可能的情况下,在后续查询中重用MySQL结果,这些查询的表单选择与($result)不同,php,mysql,Php,Mysql,我有一个非常复杂的查询,它基本上为我提供了一个主表,其中包含数据库中多个表中不同列的不同组合,称之为$query(使用PHP),$result=mysql\u查询的结果。我希望能够在后续较小的查询中重用$result,而无需再次执行真正复杂的查询 类似于从$result中选择不同的列,其中xxx和xxx以及xxx。如果我真的为$result in输入字符串,它会起作用,但是如果它不必超时执行整个复杂的查询,它似乎会更有效。这可能吗?您可以: 将结果保存到临时表中: 创建临时表MyTestable
创建临时表MyTestable选择。。。
然后使用:
从MyTestable中选择不同的列,其中xxx和xxx以及xxx
创建视图我的视图选择。。。
然后使用:
从myView中选择不同的列,其中xxx和xxx以及xxx
创建临时表MyTestable选择。。。
然后使用:
从MyTestable中选择不同的列,其中xxx和xxx以及xxx
创建视图我的视图选择。。。
然后使用:
从myView中选择不同的列,其中xxx和xxx以及xxx
因此,显然存在性能差异:视图可以使用基础表的索引,而临时表必须定义自己的索引。但是临时表使用缓存的数据,因此不必每次都重新运行基础查询(而视图需要)。只需不更改存储在其中的变量即可。如果您尝试先编写代码,然后在代码和任何错误之后出现任何问题时,我们可以提供更具建设性的反馈。如果您真的使用<代码> MySqLyQuices()/Code >,您应该考虑迁移到<代码> MySqLi<函数或<代码> PDO。
mysql\uu
函数很久以前就被弃用了,并且在PHP7中被删除了。只需不更改存储它的变量即可。如果您尝试先编写代码,然后在代码和任何错误之后出现任何问题时,我们可以提供更具建设性的反馈。如果您真的使用<代码> MySqLyQuices()/Code >,您应该考虑迁移到<代码> MySqLi<函数或<代码> PDO。mysql\uuu
函数很久以前就被弃用了,并且在PHP7.0中被删除了。谢谢。我实际上是在使用mysqli_查询,谢谢,输入错误。这正是我需要知道的。我可以想象,如果查询很复杂,视图和临时表之间的性能会受到很大的影响,但好处是视图是动态更新和持久化的。在我的情况下,我基本上需要在会话期间使用结果进行额外的查询,这可能是一个很大的数字,然后我可以销毁它或在会话中销毁它。@sscotti:使用临时表,您可以定义索引,这将减慢其初始创建/填充,但加快后续检索;你不能在有视野的情况下这样做。因此,哪种方法对您来说最有效在很大程度上取决于您确切的模式、数据和查询,最好对这两种方法进行基准测试,看看您更喜欢哪种方法。关于使用视图的问题。这些都是您在MySQL引擎中创建的,并且它们会持续存在,比如正在创建一个表。所以你不会在PHP中以编程方式创建它?如果它有一个“监听器”来监听其他表中的更改,然后自动更新自己,那就有点不可思议了。如果其他表在会话期间不经常更新,那么这种情况下视图几乎是静态的,那么这种方法也很有效吗?是否有工具在开发过程中执行查询基准测试,以便您可以实际衡量哪种方法在各种条件下表现更好?我最近一直在使用“Atom”,它与一个PHP调试器工具和XDebug结合使用非常好,但我还没有看到用于基准测试的MySQL工具。谢谢。@sscotti:是的,视图是通过