提高MySQL中JOIN的速度

时间:2010-06-16 09:19:53

标签: mysql performance

我知道周围有类似的线程,但这是我第一次意识到查询速度可能会影响我 - 所以我真的很难从其他人那里转移问题。

话虽如此,我已成功使用以下查询与较小的数据,但如果我在适度大的表(大约120,000条记录)上使用它。我等了好几个小时。

  INSERT INTO anothertable
  (id,someint1,someint1,somevarchar1,somevarchar1)
  SELECT DISTINCT md.id,md.someint1,md.someint1,md.somevarchar1,pd.somevarchar1
  FROM table1 AS md
  JOIN table2 AS pd
  ON (md.id = pd.id);

表1和表2包含大约120,000条记录。该查询现在已经运行了近2个小时。这是正常的吗?我只需要等待。我真的不知道,但我很确定一个人可以做得更好,因为这是我第一次尝试。

我读到了关于索引的内容,但我不知道在我的情况下要索引什么?

感谢您提出任何建议 - 请随时指出我的初学者指南!

3 个答案:

答案 0 :(得分:1)

为您加入的内容编制索引。在这种情况下,在table1.id和table2.id上创建索引。你可能也应该有一个从一个表到另一个表的外键,虽然没有有意义的名字,但很难就方向提出建议。

答案 1 :(得分:1)

假设id是自动增量PK,DISTINCT是无用的,因为每一行都是唯一的。在这种情况下,删除它也应该提高性能,因为SELECT DISTINCT可能会很慢。

如前所述,请确保id字段在两个表上都有索引(如果它是PK,它会执行)。

答案 2 :(得分:0)

唯一认为你可以索引,可能会让你获得一些速度是连接的关键(md.id和pd.id)。由于它们很可能是主键,因此它们应该已经编入索引。也许聚集索引会带来一些东西。

DISTINCT真的有必要吗?它只是删除重复项,如果源表中有重复的entrys,这只能是可能的。我认为DISTINCT是这里最大的问题。