0

希望加快同一 MySQL 服务器上 2 个数据库之间的查询
需要比较 db1.Source、db2.Source 之间的 001 值并返回 db2.Source.ID
这是一次性查询,所以如果有的话我可以让它煮一会儿不是更快的方法。

db1.Source(7,816,729 行)

ID 标签值
ASP23409230 001 ASP23409230
ASP23409230 856 http://....
ASP23409230 245 工作名称
BCH20002930 001 BCH20002930
...


db2.Source (109,676,136 行)
ID 标签值
319778 001 ASP23409230
319778 856 http://....
319778 245 工作标题
319779
...

查询
SELECT t2.ID, t1.value, t2.value
FROM db1.Source t1, db2.Source t2
WHERE t1.tag = '001'
AND t2.tag = '001'
AND t1.value = t2.value;

结果
ID 值
5369620 ASP71572/glmu ASP71572/glmu
5370498 ASP73396/glmu ASP73396/glmu

这是一个错误的查询,因为 LIMIT 20 大约需要 30 秒,但到目前为止我已经能够拼凑起来。
有没有更快的方法或者我应该开始 54 小时查询(如果可能的话)

谢谢您的时间、努力和洞察力。

4

1 回答 1

0

而不是查询两个表中的所有行 - 设置仅包含所需数据的较小临时表

INSERT INTO db1.temp1
SELECT s.recordID, s.value
FROM db1.sourceTable s
WHERE s.tag='001'

INSERT INTO db2.temp1
SELECT s.recordID, s.value
FROM db1.sourceTable s
WHERE s.tag=' 001'

然后使用 2 个临时表和大约 4% 的原始行

SELECT t2.recordId, t2.value, t1.value
FROM db1.temp1 t1, db2.temp2 t2
where t1.value = t2.value

我最初认为查询很慢,因为它们位于不同的数据库中。这是它必须迭代的大量行。TAG 列也没有被索引。

发现改成复合索引值,recordId也增加了查找时间。

感谢您的帮助和见解。

于 2013-10-04T18:05:32.420 回答