0

我通过保存耗时过长的查询开始使用Zend_Db_Profiler进行基准测试。对于一个用户,此查询:

SELECT chapter, order, topic, id, name
FROM topics
WHERE id =  '1'
AND hidden =  'no'

耗时 2.97 秒。我执行了一个解释:

select_type table  possible keys  key   key_len  ref    rows   Extra
SIMPLE      topics     id          id      4     const   42     Using Where

并自己从 phpMyAdmin 运行查询,只用了 0.0108 秒。我认为表格的大小可能会产生影响,因为有一列是 varchar 和 8000 个字符长,但它不是 Select 的一部分。我也刚刚切换到半专用托管,但无法想象这会产生负面影响。任何关于我如何解决问题的想法都将不胜感激。

4

3 回答 3

3

不。PHP 和 MySQL 是服务器端技术,这意味着您的服务器会处理它们并且与客户端无关。如果您的服务器速度很慢,则将响应返回给客户端的速度会变慢。

于 2013-08-30T11:33:33.443 回答
2

由于 PHP 和 SQL 都在服务器端运行,因此用户的 Internet 连接不会影响查询速度。可能当时数据库服务器负载过大,无法及时通过查询。

于 2013-08-30T08:14:37.860 回答
2

可悲的是,您在这里关于瓶颈的前提是不正确的。此外,当测试一个查询在您的浏览器和 PHPMyAdmin(或任何其他 GUI)中的行为时,您必须在尝试再次执行相同的查询之前清除查询缓存。你没有提到你是否这样做。

跟踪可能出错的第二部分包括确认您的数据库的配置变量已被最佳设置,您选择了正确的存储引擎,并且您的索引策略是最佳的(例如选择INT主键而不是VARCHAR类似的暴行) .

这意味着在大多数情况下,您会使用 InnoDB 存储引擎。它是免费的,如果经过优化,它会很快(innodb_buffer_pool当设置为适当的大小并且当您有足够的 RAM 时,命名的服务器变量会产生奇迹)。看到您说您使用半专用主机意味着您无法控制这些配置变量。

只有当你确定

1)您没有从缓存中测试相同的查询
2)您已尽一切努力使其达到最佳状态(这包括确保您没有流氓进程强奸您的服务器)。

只有这样,您才能假设服务器和客户端之间的通信可能存在错误。

于 2013-08-30T11:44:39.040 回答