我现在真是令人困惑。
我有一个网站,该网站的数据库中的多个表中都有大量数据。通常,从我阅读的内容来看,这应该不成问题。显然并非如此。
这是我对表d
的查询
SELECT SQL_CALC_FOUND_ROWS
d.id,
d.user__id,
d.submit_date,
d.title,
d.view_count,
d.vote_count
FROM d
WHERE d.submit_date <= DATE_SUB(NOW(), INTERVAL 24 HOUR)
AND d.title != 'No Deck Title'
AND d.is_private != 1
ORDER BY d.id DESC
LIMIT 15;
SELECT FOUND_ROWS();
我在INDEX()
上有一个submit_date
,我的PRIMARY_KEY
是id
,其中user__id
是链接到位于user
表上的外键user.id
。
运行此查询最多需要30秒。我不知道为什么会这样。我无缘无故地将查询切换为此:
DROP temporary table IF EXISTS paging;
CREATE TEMPORARY TABLE paging AS
SELECT SQL_CALC_FOUND_ROWS d.id,
d.user__id,
d.submit_date,
d.title,
d.view_count,
d.vote_count
FROM d
WHERE d.submit_date <= DATE_SUB(NOW(), INTERVAL 24 HOUR)
AND d.title != 'No Title'
AND d.is_private != 1
ORDER BY d.id DESC
LIMIT 15;
SELECT FOUND_ROWS();
SELECT p.id, p.title, p.submit_date, p.view_count, p.vote_count, u.username FROM paging p
INNER JOIN user u on p.user__id = u.id;
这将在0.032秒内提取相同的精确结果集,与我上次在Workbench上进行的调用相对应。
有人可以向我解释为什么会发生这种情况吗?如果这对于具有大量数据的表来说是正常的事情呢?