【发布时间】:2016-01-13 09:59:33
【问题描述】:
我们正在开发一个私人论坛解决方案,我们有一个“帖子”表,其中包含:
- 1 个索引(主键)
- 唯一键(即相应帖子的 slug / seo-url)
- 2 个 FOREIGN 键(引用 Category(id) 和 user(id) 用于帖子类别和帖子的 OP。
现在,ID(主键)、类别(id)和用户(id)都是 INT(11) UNSIGNED,我们使用了以下内容,我们在 0.2XX 秒内得到结果(在 PHP 页面上):
- 使用 PHP PDO
- 使用 PHP-MySQLi
- 将 PHP PDO 与持久连接和缓冲查询一起使用
查询:两者的性能几乎相同(在 0.17-0.2XX 秒范围内)
- 从 post、category、user 中选择行,其中 post.userid=user.id 和 post.categoryid=category.id 和 post.id=1; -> 平均在 0.17 到 0.28 秒内给出结果
- 从内部联接类别中选择 wors 在 post.categoryid = category.id INNER JOIN user on post.userid = user.id -> 一个标签出价比以前更快,但仍然在较慢的部分。
现在,当我们使用 MyBB 或 PHPBB 时,作为测试的一部分,这些东西会在 0.2 秒内加载所有查询,包括选择会话、更新该行和插入。这些软件到底在做什么?
对于 MySQLi,我们使用 PDO Connection、Prepare、bind 和 execute.same。
作为向前迈出的一步,我在一个视图中创建了一个视图,其中包含来自所有 3 个表的所有必要列,但这又提供了相同的性能。
我做错了什么,单个查询占用 0.18-0.2XX 秒,而显示完整页面(超过 1 个选择+更新+选择)的速度更快。
案例:MyBB / PHPBB和自定义论坛都在同一台机器上使用相同的PHP-MySQL配置,只有2个用户同时访问该站点(1个用户使用2个不同的浏览器)
【问题讨论】:
标签: mysql