希望加快同一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小时查询(如果可能的话)
感谢您的时间,精力和洞察力。
答案 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也增加了查找时间。
感谢您的帮助和见解。