两个表查询速度慢:文件排序问题

时间:2009-08-11 11:53:59

标签: mysql

我正在尝试将两个不同表上的最新条目作为一个查询进行查询:

SELECT
    news.title AS news_title,
    news.sid AS news_id,
    downloads.lid AS download_id,
    downloads.title AS download_title
FROM
    news,
    downloads
ORDER BY
    news_id DESC,
    download_id DESC
    LIMIT 0,10

查询非常慢,当我执行"Using temporary; Using filesort"时,它会显示EXPLAIN。每张桌子都有大约2,000件物品。每个表的主键索引是id(lidsid)。

2 个答案:

答案 0 :(得分:2)

您没有加入条件,因此它会加入新闻中的每一行以及下载中的每一行。这称为交叉连接或笛卡尔积。因此,如果新闻有1000行,而下载有3000行,则会返回300万行。

你可能想要这样的东西:

SELECT news.title AS news_title,
       news.sid AS news_id,
       downloads.lid AS download_id,
       downloads.title AS download_title
FROM news n
JOIN downloads d ON n.some_column = d.join_column /* fill this part in */
ORDER BY news_id DESC,download_id DESC LIMIT 0,10

一个连接列很可能是一列的主键,另一列是外键。

哦,确保外键也被编入索引。

答案 1 :(得分:0)

你想要加入这些表格。您所做的是创建一个查询,该查询吐出笛卡尔积 - 一行中的每一行和另一行的每一行。这就是为什么它很慢。

您想要添加一个WHERE表A.key = table b.field来加入它们。

兰斯