1

我现在难以置信的困惑。

我有一个网站,在我的数据库中的多个表中有大量数据。通常这不应该是我读过的问题。显然情况并非如此。

这是我对表格的查询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()onsubmit_date并且我的PRIMARY_KEYis 是链接到表的外键。iduser__iduseruser.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;    

根据我在 Workbench 上的最后一次调用,这将在 0.032 秒内提取相同的确切结果集。

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

4

0 回答 0