如何解决250选择vs 1
| 我想我知道这个问题的答案,但希望对此有其他意见。因此,我继承了一个电子邮件脚本,该脚本每次执行时都会发送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个服务器命中的情况。其余的,您的建议看起来很合理
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。