【问题标题】:[PHP-PDO What is making my query slowdown?[PHP-PDO 是什么让我的查询变慢了?
【发布时间】:2016-01-13 09:59:33
【问题描述】:

我们正在开发一个私人论坛解决方案,我们有一个“帖子”表,其中包含:

  1. 1 个索引(主键)
  2. 唯一键(即相应帖子的 slug / seo-url)
  3. 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 秒范围内)

  1. 从 post、category、user 中选择行,其中 post.userid=user.id 和 post.categoryid=category.id 和 post.id=1; -> 平均在 0.17 到 0.28 秒内给出结果
  2. 从内部联接类别中选择 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


    【解决方案1】:

    我做错了什么

    您正在寻找完全错误的方向。您采取的每一项措施都与查询性能无关。

    您要做的是研究给定查询的EXPLAIN 输出,并相应地设置索引,以使这些查询使用所有相关表的索引。

    【讨论】:

    • 嗨,您建议使用哪些索引?我正在查看表,所有表都有一个默认的 BTREE INDEX,它恰好分别是主键,而 post 表有 4 个索引,即所有主键、唯一键和外键。
    猜你喜欢
    • 2022-01-08
    • 2020-04-09
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2011-04-08
    相关资源
    最近更新 更多