代码之家  ›  专栏  ›  技术社区  ›  Andrey

从包含+6500万条记录的join创建临时表mysql

  •  0
  • Andrey  · 技术社区  · 6 年前

    我在使用mysql我有两个表,在proc运行期间我要对它们进行多个选择,每个表都有1亿个记录,为了加快proc我想做的是这个连接,把它作为临时表(包含65+milion个记录),以后在过程中使用这个表。创造它。我在用。下一个。

       create temporary table T_join (INDEX(tm_id))
        SELECT 
            t1.id,
            t2.tm_id,
            t1.code,
            t1.bincode,
            t1.AU,
            t1.TA,
            t2.fin_amount,
            t2.m_id
        FROM
            pm_customers t1
                INNER JOIN
           client_transactions_final t2 ON t1.id = t2.id
    

    所有直截了当创建这个临时表过程的唯一问题是花费20多分钟,如何加快呢?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Andrey    6 年前

    对于此查询:

    SELECT c.id, ct.tm_id, c.code, t1.bincode, c.AU, c.TA,
           ct.fin_amount, ct.m_id
    FROM pm_customers c INNER JOIN
         client_transactions_final ct
         ON c.id = ct.id;
    

    你可能想要一个索引 client_transactions_final(id, tm_id, fin_amount, m_id) 是的。这是查询的覆盖索引,因此这将提高性能。

    我不认为您真的需要创建这个临时表。有了正确的索引,join的速度通常很快。当有聚合和更复杂的查询时,临时表更有意义。我不是说它不起作用,只是它不是第一个想到的解决方案。