1

MyPHP 应用程序使用 HTTPClient 向 MySQL 发送一个 SELECT 语句。

大约需要 20 秒或更长时间。我认为 MySQL 无法立即获得结果,因为 MySQL 管理员在我等待结果期间sending data或期间显示 stat 。copying to tmp table

但是,当我从另一个应用程序(如 phpMyAdmin 或 jmater)发送相同的 SELECT 语句时,它需要 2 秒或更短时间。快 10 倍!

有谁知道为什么 MySQL 表现如此不同?

4

2 回答 2

1

就像@symcbean 已经说过的那样,php 的 mysql 驱动程序缓存查询结果。这也是为什么你可以mysql_query()while($row=mysql_fetch_array())循环中再做一次。

MySql Administrator 或 phpMyAdmin 如此快速地显示结果的原因是它们LIMIT 10在您背后附加了一个查询。

如果您想快速获得查询结果,我可以提供一些提示。它们涉及仅选择您需要的内容以及何时需要:

  • 只选择你需要的列,不要select *到处乱扔。当您想要另一列但忘记将其添加到select语句时,这可能会咬到您,所以在需要时执行此操作(例如具有 100 列或一百万行的表)。
  • 不要在你的用户面前扔一个 20 x 1000 的桌子。无论如何,她在一张巨大的桌子上找不到她要找的东西。提供排序和过滤。作为奖励,找出她通常寻找的内容,并提供一种单击即可显示该记录的方法。
  • 对于非常大的表,只选择您需要的记录的主键。while()而不是在循环中检索其他详细信息。这可能看起来不合逻辑,因为您进行了更多查询,但是当您处理涉及大约 10 个表、数百个并发用户、锁和查询缓存的查询时;一开始事情并不总是有意义的:)

这些是我从老板和我自己的经验中学到的一些技巧。一如既往,YMMV。

于 2012-08-28T10:37:20.210 回答
0

有谁知道为什么 MySQL 表现如此不同?

因为 MySQL缓存查询结果,而操作系统缓存磁盘 I/O(Linux 中的进程描述见此链接)

于 2012-08-28T09:28:25.533 回答