Mysql 有效地联接两个表

Mysql 有效地联接两个表,mysql,sql,database,Mysql,Sql,Database,我有两个表共享相同的属性“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 d

我有两个表共享相同的属性“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)

然而,这是非常缓慢的。是否有一些有效的方法来执行连接

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
确保cust.attr和sales.attr也已编制索引


这篇关于连接的文章将很有帮助:

两个表上的attr都被索引了吗?no attr不是索引。我认为一个很好的方法是对其进行索引:)是的,一旦您进行了索引,最好使用join在chunnk中使用limit选择数据,这也将提高性能。另外,请确保attr col在两个表中具有相同的大小和数据类型,以便在连接时使索引工作。
SELECT cust.* 
FROM cust 
INNER JOIN sales attr
ON sales.attr = cust.attr
WHERE [query conditions here]