gpt4 book ai didi

php - Mysql通过远程连接DB进行查询

转载 作者:行者123 更新时间:2023-11-29 11:34:18 24 4
gpt4 key购买 nike

为了进行开发,我在内部网络上使用 vagrant 和远程 MySQL 数据库,如果我是外部网络,则使用 VPN 连接到该数据库。

我有一个执行约 2000 个查询的进程。当我通过 VPN 开发此过程时,单个查询可能需要大约 0.3 秒才能运行,这意味着如果 ajax 调用没有首先崩溃,整个过程将需要 10 分钟。

在生产服务器上运行它只需不到 10 秒。

这个问题分为两个部分。

  1. 我可以优化 vagrant 和远程数据库之间的连接,以便每个查询更快。

和/或

  • 我可以优化流程以减少查询吗?
  • 对于问题 2,该过程涉及将一条记录插入到邮件表中,然后在循环内更新另一个表中的记录,因此这两个查询各发生大约 1000 次。我目前正在循环外准备语句并在循环内执行。我尝试过使用关闭自动提交的事务。

    //Insert query
    INSERT INTO emails
    (
    email,
    subject,
    html
    )
    VALUES
    (
    :email,
    :title,
    :html_message
    )

    //Update query
    UPDATE
    details
    SET
    email_sent_date = :sent_date,
    unique_val = :val
    WHERE
    id = :id

    最佳答案

    不要在循环中执行单独的查询,而是尝试将它们组合成单个查询。对于 INSERT,您可以使用多个值列表:

    INSERT INTO emails (email, subject, html)
    VALUES (:email1, :subject1, :html1), (:email2, :subject2, :html2), ...

    对于UPDATE,您可以使用条件赋值。

    UPDATE details
    SET email_sent = CASE id
    WHEN :id1 THEN :sent_date1
    WHEN :id2 THEN :sent_date2
    ...
    END,
    unique_val = CASE id
    WHEN :id1 THEN :val1
    WHEN :id2 THEN :val2
    ...
    END
    WHERE id IN (:id1, :id2, ...)

    您应该能够从输入数据动态生成这些查询和关联参数数组。

    关于php - Mysql通过远程连接DB进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36874271/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com