【发布时间】:2010-01-18 16:24:09
【问题描述】:
我每天都在运行一个查询来编译统计数据 - 但它似乎真的效率低下。这是查询:
SELECT a.id, tstamp, label_id, (SELECT author_id FROM b WHERE b.tid = a.id ORDER BY b.tstamp DESC LIMIT 1) AS author_id
FROM a, b
WHERE (status = '2' OR status = '3')
AND category != 6
AND a.id = b.tid
AND (b.type = 'C' OR b.type = 'R')
AND a.tstamp1 BETWEEN {$timestamp_start} AND {$timestamp_end}
ORDER BY b.tstamp DESC
LIMIT 500
这个查询似乎运行得很慢。为废话命名道歉 - 我被要求不要透露实际的表名。
之所以有子选择,是因为外部选择从表 a 中获取一行,从表 b 中获取一行。但还需要知道表 b 中最新的 author_id,所以我运行一个子选择来返回那个。我不想在 php 循环中运行另一个选择 - 因为这也是低效的。
它工作正常 - 我只需要找到一种更快的方法来获取此数据集。
【问题讨论】:
-
@Matt:您应该尝试提供的答案,投票有帮助并接受解决您问题的答案。如果他们都没有,请考虑编辑您的问题以提供更多信息。
标签: php sql mysql optimization subquery