问题描述
|
我想我知道这个问题的答案,但希望对此有其他意见。因此,我继承了一个电子邮件脚本,该脚本每次执行时都会发送X封邮件。目前,它以一种奇怪的方式来做事(IMO)
SELECT emailid,emailTo
FROM email
ORDER BY
dateadded ASC,priority ASC,emailDomain.DESC
LIMIT 250
然后通过PHP循环运行此程序,以获取内容
SELECT subject,message,emailHeaders
FROM email
WHERE emailid = {$id}
消息和标头是完整的电子邮件标头(带有HTML),因此包含了很多内容,现在,我认为在初始选择时选择此内容会比单独请求每个邮件的DB 250次更为有效。因此将主查询更改为
SELECT emailid,emailTo,subject,emailHeaders
FROM email
ORDER BY
dateadded ASC,emailDomain.DESC
LIMIT 250
对我来说感觉更好,我已经运行了查询,并且比没有选择所有内容的查询慢很多,但是按ID(索引)请求内容250次会更好吗?如果有人对此有一些统计或意见,我将不胜感激。
谢谢
解决方法
最好在单个查询中获取所有数据。您没有在WHERE和ORDER BY子句中引用主题,消息或emailHeader,因此未在处理数据。另外,由于以下原因,最好执行一个查询:
250个选择可能存在的锁定问题
服务器必须花时间在接收/解析/处理250个查询上,而不是一个
,数据库使用文件来存储信息。
在大多数情况下,您的SQL客户端会创建与SQL Server的连接,并询问问题(\“ requests \”)。服务器执行查询,读取文件,然后发送回相应的结果。然后发出请求的应用程序(您的邮件应用程序)使用该信息。
向DBMS发出最少请求的方式更加高效。
获取整个结果集,然后在您的应用程序中循环遍历。 (这是方便使用foreach循环的地方。)
,是否存在所有250封电子邮件中只有一小部分被发送的情况?
我认为这是唯一可能最多辩论251个服务器命中的情况。其余的,您的建议看起来很合理