2

我正在使用一个 PHP 网络服务,我在其中执行了一个简单的 SELECT 查询并将其存储

$result = run_query($get_query);

我现在需要根据不同的参数对数据进行进一步的查询,我知道这可以通过 MySQL 的形式:

SELECT * 
FROM (SELECT *
      FROM customers
      WHERE CompanyName > 'g')
WHERE ContactName < 'g'

我知道这会在表上执行两个 Select 查询。但是,我想知道的是,我是否可以简单地在第二部分的 FROM 部分中使用我以前保存的查询,例如这样,并且我认为它通过不再次查询整个数据库来提高性能的信念是正确的:

SELECT * 
FROM ($result)
WHERE ContactName < 'g'
4

5 回答 5

1

PHP 和 SQL 是不同的语言和非常不同的平台。它们通常甚至不在同一台计算机上运行。您的 PHP 变量根本不会与 MySQL 服务器交互。您使用 PHP 创建一个恰好包含 SQL 代码的字符串,仅此而已。最后,唯一重要的是你发送到服务器的 SQL 代码——你如何设法生成它是无关紧要的。

此外,除非您获得解释计划,否则您无法真正说出 MySQL 将如何运行查询:

EXPLAIN EXTENDED
SELECT * 
FROM (SELECT *
      FROM customers
      WHERE CompanyName > 'g')
WHERE ContactName < 'g'

...但我怀疑它会为您的查询读取两次表格。内存比磁盘快得多。

于 2013-03-26T16:26:34.113 回答
1

谢谢大家的回复。原来我正在寻找的是一个“查询的查询”,它不被 PHP 直接支持,但我在这里找到了一个提供该功能的函数:http ://www.tom-muck.com/blog/index .cfm?newsid=37

这是从另一个 SO 问题中发现的:Can php query the results from a previous query?

我仍然需要进行比较以确定它是否提高了速度。

于 2013-03-26T18:23:13.403 回答
1

您可以制作一个临时表来放置初始结果,然后使用它来选择数据并在第二个查询中。仅当您的第一次查询很慢时,这才会更快。

于 2013-03-26T16:22:42.653 回答
0

如果我正确理解您的问题,您想知道将 SQL 查询的“来自”部分保存在 php 变量中是否可以提高查询 SQL 服务器的性能,那么答案是否定的。仅仅是因为保留值的变量被插入到查询中。

是否在 PHP 中获得了性能,答案很可能是肯定的;但取决于变量值的长度(以及您重复使用变量而不是构建新的完整查询的频率)性能是否显着。

于 2013-03-26T16:16:19.977 回答
0

为什么不在这样的单个查询中获取这些数据呢?

SELECT * 
FROM customers
WHERE CompanyName > 'g'
AND ContactName < 'g'
于 2013-03-26T16:20:47.277 回答