对于开发,我在我的内部网络上使用带有远程MySQL数据库的vagrant,如果我是外部的,我用vpn连接到它。
我有一个执行~2000个查询的进程。当我使用vpn进行此过程时,单个查询可能需要大约0.3秒才能运行,这意味着如果ajax调用没有先崩溃,整个过程将需要10分钟。
在生产服务器上运行此操作只需不到10秒。
这个问题分为两部分。
和/或
对于问题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
答案 0 :(得分:1)
尝试将它们组合成单个查询,而不是在循环中执行单独的查询。对于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, ...)
您应该能够从输入数据动态生成这些查询和关联参数数组。