我有两个表共享相同的属性'attr‘。表cust中属性'attr‘中的值域是表sales中属性'attr’中值的域的子集。例如,表cust包含940、8575、454、86869、856869、9686作为属性'attr‘中的值,而表sales包含454、86869、856869、8756、5324、946707、9779。此外,表cust包含10亿行,而表sale包含1万亿行。为了执行连接,我尝试了以下命令:
select * from cust where cust.attr in(select distinct attr from table sales)然而,这被证明是非常slow..is的,有一些有效的方法来执行连接
发布于 2014-05-02 13:06:42
10亿行!!... 1万亿行!!
在两个表中的attr列上创建索引
ALTER TABLE cust ADD INDEX (attr);
ALTER TABLE sales ADD INDEX (attr);然后使用下面的语法进行连接。
select * from cust c
inner join sales s
on c.attr=s.attr发布于 2014-05-02 13:07:20
SELECT cust.*
FROM cust
INNER JOIN sales attr
ON sales.attr = cust.attr
WHERE [query conditions here]确保cust.attr和sales.attr也已编入索引
这篇关于JOINs的文章将会很有帮助:http://webduos.com/mysql-join-syntax/
https://stackoverflow.com/questions/23421058
复制相似问题