从($ result)WHERE中形成SELECT DISTINCT的后续查询中重用MySQL结果,可能

时间:2016-08-02 14:01:52

标签: php mysql

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

来自$ result WHERE xxx AND xxx AND xxx的SELECT DISTINCT列。它可以找到我是否真的为$ result输入字符串,但如果它不必超时执行整个复杂查询,它似乎更有效。这可能吗?

1 个答案:

答案 0 :(得分:2)

你可以:

  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
      
    2. 不同之处在于视图在所有会话中都是可见的,并且会持续到手动删除为止;而临时表只在创建它们的会话中可见(因此当该会话结束时不再存在)。

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

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