多个SQL查询是否会显着影响性能?

时间:2010-10-25 21:24:06

标签: php sql mysql

我正在使用MySql(和PHP)。

最好是举个例子:
我正在进行查询,说SELECT * FROM a_table WHERE type='visible'然后返回计数。然后我再次查询WHERE type='hidden'等。我可以再次查询以获取完整内容。所有查询都是唯一的,但来自同一个表。我还查询具有唯一查询的多个其他表。 (在查询中散布了mysql_real_escape_string()的PLUS执行时间)

我不确定我完成了多少次查询。但是我担心如果我不断增加查询,我将开始进入大的执行时间。

我的问题是:大量的查询是否会在性能上引人注目?如果是,是否有更好的解决方案来存储该数据?是执行初始查询并将所有行存储在一个数组中(大数组可能是1000行),然后更快地(和/或可行)操作数组?这个灰色区域会变成黑白多少个查询?

<小时/> “优化查询”的结果。

这些是以秒为单位的执行时间:

  • 无优化:.358 s
  • 返回COUNT(*).321 s
  • 减少列选择:.266 s

尽管如此,最大的问题是在每次查询期间都没有打开连接。我每次民意调查时都是愚蠢地打开和关闭数据库连接。通过将其更改为一个连续连接,我将执行时间缩短到.085 s

经验教训。感谢所有的投入!

6 个答案:

答案 0 :(得分:4)

如果您在一个查询中执行此操作,PHP将不得不完成其余的工作。所以,问题在于瓶颈在哪里。数据库服务器机器是否比网络服务器机器慢?它们之间的网络连接怎么样?正如我猜测的那样,根据您的条件优化它的最佳方法是试验。

答案 1 :(得分:3)

不要预先优化。显然,查询越少,运行它们的开销就越少,但这种开销通常非常小。查询的数量并不像正确索引表和优化实际查询本身那么重要。

通常,每个查询都必须通过网络将一些数据发送到数据库进程上的侦听端口,该端口分析,编译和运行查询。通常,查询计划缓存将确保花费最少的时间来完成此操作。只要您的网络没有任何瓶颈,RPC开销就会很低,大约几毫秒或更短。

实际上,它将取决于查询本身以及您所处的情况。

答案 2 :(得分:2)

查询越少越好。其中,只获得实际需要的列。

答案 3 :(得分:2)

如果要计算不同类型,请使用以下查询:

  SELECT `type`, COUNT(*) AS `count`
    FROM `a_table`
GROUP BY `type`

答案 4 :(得分:2)

我同意其他用户的意见。查询越少越好。

另一方面,考虑一下。现在,平均CPU速度超过1GHz,即每秒约1,000,000个时钟周期,并且在每个时钟周期内,您可以完成多项任务。例如,ALU(算术逻辑单元)每个时钟周期可以执行多于1次的添加。

考虑到这一点,拥有超过1个查询并不是什么大问题。处理额外的一个或两个或三个查询需要几毫秒(最多)。基本上用户可能甚至不会注意到这一点。

警告但是,如果你有100个额外的查询,是的,这可能会导致一些明显的延迟。因此,我们的想法是以适量的方式做事。

答案 5 :(得分:0)

当然,大型查询和多个查询都会受到影响,因为数据库查询涉及连接,查询和断开连接。

为了提高性能,请确保你有适当的标志用于mysql,conf以及有缓存的变量,如果你一次又一次地引用同一个表,它们将阻止你进入数据库。

- 干杯