0

我已经导入了 2 个我想比较到 MySQL 表中的 .csv 文件。现在我想使用连接来比较它们。

但是,每当我在查询中包含这两个表时,我都没有得到 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;
4

3 回答 3

3

看起来您正在查询中进行纯catesian 联接

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

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

于 2012-08-30T10:52:23.323 回答
1

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

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

于 2012-08-30T12:58:16.227 回答
0
  1. 在连接列上添加索引。这应该有助于提高性能。

  2. 使用 MySQL Workbench 或 MySQL Client(控制台)进行长查询。phpmyadmin 并非旨在显示返回 100k 行的查询 :)

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

有一个直接链接,因为我找不到英文描述。

于 2012-10-23T06:23:19.147 回答