【问题标题】:Efficiently join two tables有效地连接两个表
【发布时间】:2014-05-02 13:07:19
【问题描述】:

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

但是,这会很慢。有没有一些有效的方法来执行连接

【问题讨论】:

  • attr 是否在两个表上都有索引?
  • no attr 不是索引。我认为一个好方法是索引它:)
  • 是的,一旦你做索引更好地选择块中的数据,限制使用连接,这也将提高性能。
  • 还要确保 attr col 在两个表中具有相同的大小和数据类型,以便在加入时索引正常工作。

标签: mysql sql database


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    SELECT cust.* 
    FROM cust 
    INNER JOIN sales attr
    ON sales.attr = cust.attr
    WHERE [query conditions here]
    

    确保 cust.attr 和 sales.attr 也被编入索引

    这篇关于 JOIN 的帖子会有所帮助:http://webduos.com/mysql-join-syntax/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 2013-06-21
      • 2023-04-09
      相关资源
      最近更新 更多