250选择vs 1

时间:2011-05-23 12:00:06

标签: mysql optimization

我想我知道这个问题的答案但想要另一个意见。所以我继承了一个电子邮件脚本,每次执行时都会发送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, message, emailHeaders
FROM email
ORDER BY
    dateadded ASC, priority ASC, emailDomain.DESC
LIMIT 250

对于我感觉更好的我,我已经运行了查询并且它没有明显慢于没有所有内容的选择,但是更好地通过id(索引)250次要求内容?如果有人对此有任何统计或意见,我会很感激输入。

由于

3 个答案:

答案 0 :(得分:1)

最好在单个查询中获取所有数据。您没有在WHERE和ORDER BY子句中引用subject,message或emailHeaders,因此数据未被处理。由于以下原因,最好执行一个查询:

  • 250选择的可能锁定问题
  • 服务器必须花时间接收/解析/处理250个查询而不是一个

答案 1 :(得分:1)

数据库使用文件来存储信息。 大多数情况下,您的SQL客户端会创建与SQL服务器的连接,询问事物(“请求”)。服务器执行查询,读取文件,并发回相应的结果。然后,发出请求的应用程序(您的邮件应用程序)使用该信息。

向DBMS提出最少的请求会更有效率。

获取整个结果集,并在应用程序中循环它。 (这是foreach-loop很方便的地方。)

答案 2 :(得分:0)

是否只有250封电子邮件中的一小部分被发送?

我认为这是唯一一种最大数量的251服务器点击可能存在争议的情况。在休息时,您的提案看起来非常合法