首页 > 解决方案 > mysql - 使用 union all 查询 3 个数据库 - 优化

问题描述

我有一个 MySQL 查询,需要在 3 个不同的数据库(db1、db2 和 db3)上运行,并查询 3 个数据库中完全相同的 2 个表:sales_order_itemsales_order_item

(
                SELECT
                    COUNT(DISTINCT soi.fk_sales_order) AS total_sales
                 FROM
                    db1.sales_order_item soi
                left join db1.sales_order_item_status sois 
                    ON soi.fk_sales_order_item_status = sois.id_sales_order_item_status
                WHERE
                    sois.name NOT IN ('invalid', 'test_invalid', 'new', 'placed', 'exchange_return_pending', 'exportable')
                AND DATE(date_add(created_at, INTERVAL 04 HOUR)) = DATE(date_add(CURRENT_TIMESTAMP, INTERVAL 04 HOUR))
            )

如前所述,我正在使用union all为 3 个不同的数据库运行上述查询。

问题是这些表,每个表都包含 40 到 8000 万行的数据,上述查询大约需要 1.5 小时才能执行。

我不确定是否有办法进一步优化上述查询,即使查询中使用的列都已编入索引。

任何帮助将不胜感激。

标签: mysql

解决方案


推荐阅读