比较时间为2个大型MySQL数据库表

时间:2012-08-30 10:49:53

标签: php mysql

我已导入2个.csv文件,我想将其与MySQL表进行比较。现在我想用join来比较它们。

但是,每当我在查询中包含这两个表时,我都没有得到phpMyAdmin的响应(有时它会显示'超出最大执行时间)。

两个db表中的记录大小最大为73k。我不认为这对数据有很大影响。甚至像

这样的简单查询
SELECT *
FROM abc456, xyz456

似乎挂了。我做了一个解释,我在下面得到了这个。我不知道该怎么做。

id  select_type     table   type    possible_keys   key     key_len     ref    rows     Extra
1   SIMPLE  abc456  ALL     NULL    NULL    NULL    NULL    73017   
1   SIMPLE  xyz456  ALL     NULL    NULL    NULL    NULL    73403   Using join buffer

有人可以帮忙吗?

更新:使用复合键添加表的结构。此表中将插入大约100000条以上的记录。

CREATE TABLE IF NOT EXISTS `abc456` (
`Col1` varchar(4) DEFAULT NULL,
`Col2` varchar(12) DEFAULT NULL,
`Col3` varchar(9) DEFAULT NULL,
`Col4` varchar(3) DEFAULT NULL,
`Col5` varchar(3) DEFAULT NULL,
`Col6` varchar(40) DEFAULT NULL,
`Col7` varchar(200) DEFAULT NULL,
`Col8` varchar(40) DEFAULT NULL,
`Col9` varchar(40) DEFAULT NULL,
`Col10` varchar(40) DEFAULT NULL,
`Col11` varchar(40) DEFAULT NULL,
`Col12` varchar(40) DEFAULT NULL,
`Col13` varchar(40) DEFAULT NULL,
`Col14` varchar(20) DEFAULT NULL,
KEY `Col1` (`Col1`,`Col2`,`Col3`,`Col4`,`Col5`,`Col6`,`Col7`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

3 个答案:

答案 0 :(得分:3)

您的查询中似乎正在进行纯catesian加入。

你不应该加入某些领域的牌桌吗?如果你这样做并且查询仍然需要很长时间才能执行,你应该放置适当的索引来加速查询。

它花了这么长时间的原因是它试图将第一个表的每一行连接到第二个表的每一行。

答案 1 :(得分:1)

您需要一个连接条件,以某种方式识别哪些行应该匹配:

SELECT * FROM abc456, xyz456 WHERE abc456.id = xyz456.id

答案 2 :(得分:0)

  1. 在连接列上添加索引。这应该有助于提高绩效。

  2. 使用MySQL Workbench或MySQL Client(控制台)进行长查询。 phpmyadmin不是为了显示返回100k行的查询而设计的:)

  3. 如果您真的必须使用phpmyadmin并且需要运行长查询,则可以使用Firefox扩展来阻止phpmyadmin超时:phpMyAdmin Timeout Preventer (direct link!)

  4. 有一个直接链接,因为我无法找到英文描述。