2个数据库之间更快的mysql查询

时间:2013-10-03 18:44:55

标签: mysql sql sql-server database

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

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
在哪里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小时查询(如果可能的话)

感谢您的时间,精力和洞察力。

1 个答案:

答案 0 :(得分: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
其中t1.value = t2.value

我原本以为查询速度很慢,因为它们位于不同的数据库中。这是必须迭代的大量行。此外,TAG列未编入索引。

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

感谢您的帮助和见解。