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

deikduxw  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(450)

我用的是mysql,我有两个表,在proc运行期间我对它们进行了多次选择,每个表都有超过1亿条记录,为了加速proc,我想把它作为temp表(包含65+百万条记录),以后在过程中使用这个表。去创造它。我正在使用。下一个。

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多分钟,如何加速呢?

2q5ifsrm

2q5ifsrm1#

对于此查询:

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通常会非常快。当您有聚合和更复杂的查询时,临时表更有意义。我并不是说它行不通,只是说这不是我想到的第一个解决方案。

相关问题