php - 在具有 SELECT DISTINCT from($result) WHERE, ?possible 形式的后续查询中重用 MySQL 结果

标签 php mysql

我有一个非常复杂的查询,它基本上为我提供了一个主表,其中包含数据库中多个表中各个列的不同组合,称之为 $query(使用 PHP),$result = mysql_query 的结果。我希望能够在后续较小的查询中重用该 $result,而不必再次执行真正复杂的查询。

类似于从 $result WHERE xxx AND xxx AND xxx 中选择不同列。如果我实际上将 $result 的字符串放入其中,它可以找到,但如果它不必超时执行整个复杂的查询,它似乎会更有效。这可能吗?

最佳答案

您可以:

  1. 将结果保存到临时表中:

    CREATE TEMPORARY TABLE myTempTable SELECT ...
    

    然后使用它:

    SELECT DISTINCT column FROM myTempTable WHERE xxx AND xxx AND xxx
    

  1. 使用view :

    CREATE VIEW myView SELECT ...
    

    然后使用它:

    SELECT DISTINCT column FROM myView WHERE xxx AND xxx AND xxx
    

不同之处在于, View 在所有 session 中都是可见的,并且将持续存在,直到手动删除;而临时表仅在创建它们的 session 中可见(因此在该 session 结束时不再存在)。

此外, View 正是:基础数据的 View ,因此当基础表更新时,此类更改将在查询 View 时立即反射(reflect)出来(正常的事务隔离行为除外) 。相比之下,临时表(就像普通表一样)保存数据的静态副本,只有在后续查询显式更新时才会更改该数据。

显然,存在性能差异: View 可以使用基础表的索引,而临时表必须有自己的定义。但临时表使用缓存数据,因此不必每次都重新运行底层查询(而 View 则需要)。

关于php - 在具有 SELECT DISTINCT from($result) WHERE, ?possible 形式的后续查询中重用 MySQL 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38722632/

相关文章:

php - SQL 棘手的嵌套请求

php - Mysql连接两个表

mysql - 连接 3 个包含空值的表

php - 使用 LDAP/PHP/IIS/SSL 在 Active Directory 中更改密码

php - 使用搜索词 PHP 从 MySQL 中绘图。我不知道出了什么问题

php - 如何在数组中查找重复值的索引

mysql - SQL - Java/Eclipse - UPDATE 语句查询 [重新询问,插入更多代码]

php - 如何使用 Laravel 事务回滚

mysql - 使用 SparkSQL 删除 MySQL 表

php - 为什么我不应该在 php 中使用 unix 命令?