创建临时表极大地加快了我的数据库调用速度,为什么会这样?

时间:2019-05-12 05:42:13

标签: mysql temp-tables

我现在真是令人困惑。

我有一个网站,该网站的数据库中的多个表中都有大量数据。通常,从我阅读的内容来看,这应该不成问题。显然并非如此。

这是我对表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_KEYid,其中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上进行的调用相对应。

有人可以向我解释为什么会发生这种情况吗?如果这对于具有大量数据的表来说是正常的事情呢?

0 个答案:

没有答案
相关问题