我通过保存耗时太长的查询开始使用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的一部分。我也刚刚切换到半专用托管,但无法想象这会产生负面影响。任何关于我如何排除故障的想法都将不胜感激。
答案 0 :(得分:3)
没有。 PHP和MySQL是服务器端技术,这意味着您的服务器处理它们并且与客户端无关。如果您的服务器速度很慢,那么将响应返回给客户端的速度会慢一些。
答案 1 :(得分:2)
由于PHP和SQL都在服务器端运行,因此用户的Internet连接不会影响查询的速度。 也许数据库服务器当时加载太多,无法及时传递查询。
答案 2 :(得分:2)
跟踪可能出错的第二部分包括确认数据库的配置变量已经过最佳设置,选择了合适的存储引擎,以及您的索引策略是否最佳(例如选择INT
为主键而不是VARCHAR
和类似的暴行。)
这意味着在大多数情况下,你会使用InnoDB存储引擎。它是免费的,如果进行了优化,它会很快(名为innodb_buffer_pool
的服务器变量在设置为适当的大小和有足够的RAM时会产生奇迹)。看到你说你使用半专用托管意味着你无法控制那些配置变量。
只有当你确定
时 1)您没有从缓存中测试相同的查询
2)你已经尽力做到最优化(这包括确保你没有恶意进程强奸你的服务器)。
只有这样,您才能假设服务器和客户端之间的通信可能存在错误。