【问题标题】:Which method is faster and gives better efficiency?哪种方法更快,效率更高?
【发布时间】:2019-11-22 06:20:01
【问题描述】:

环境: NodeJS , Websocket , MySQL , CentOS 服务器

我到底想要什么?

这是我的 MySQL 数据库表“users_history”

+-----+---------+------------------+
| ID  | UserID  |     History      |
+-----+---------+------------------+
|  1  |      1  | Login            |
|  2  |      2  | Login            |
|  3  |      1  | Added new record |
|  4  |      2  | Added new record |
|  5  |      1  | Added new record |
|  6  |      3  | Login            |
|  7  |      3  | Added new record |
|  8  |      3  | Added new record |
|  9  |      1  | Added new record |
| 10  |      2  | Deleted recoed   |
+-----+---------+------------------+

我想根据他们的 UserID 将他们的历史记录发送到他们的 Websocket 连接。

问题?

我有两种方法,但不知道哪一种更快,效率更高?

方法一

为每个用户从数据库中选择数据。

示例:

对于用户 1: 从 UserID = 1 的历史记录中选择 *

对于用户 2: 从 UserID = 2 的历史记录中选择 *

对于用户 3: 从 UserID = 3 的历史记录中选择 *

并根据用户 ID 将他们的数据发送给每个用户

.

方法二

在一个查询中选择所有数据并存储在一个数组中,然后过滤每个 UserID 的数据并根据他们的 UserID 发送给用户。

示例:

Select * from history where UserID IN (1,2,3)

【问题讨论】:

  • 我相信您一次只需要获取单个用户的历史记录?如果是,为什么需要获取所有其他用户的历史记录。最小化您的查询输出大小。在大多数情况下,这是主要的性能瓶颈。
  • 你好@MadhurBhaiya,我需要一次Websocket服务器上所有连接用户的历史记录。
  • @MadhurBhaiya 由于他使用的是实时客户端通信(websockets),他将拥有当前连接的每个用户的 id,我相信他会同时发送每个用户的所有数据时间。在这种情况下,他应该使用方法 #2 来减少到数据库的往返次数。
  • 好吧,如果我需要知道这个问题的答案,我会尝试两种方法并在查询周围放置一个开始和停止计时器。或者使用 WorkBench 之类的工具测试查询,它会在每个查询中为您提供时间
  • @Paulpro senario 建议所有用户同时想要这些信息。而且,我想没有真正要求它

标签: mysql arrays node.js performance filter


【解决方案1】:

数据库不能“发送”数据。相反,您SELECT 是您想要的数据。预期的收件人可以发起SELECT 并取回结果。或者您可以让其他代理执行SELECT 并以某种方式将其“发送”给“用户”,可能是通过电子邮件。

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2012-06-15
    相关资源
    最近更新 更多