mysql-使用union all查询3个数据库-优化

时间:2018-09-25 08:47:40

标签: mysql

我有一个如下所示的MySQL查询,该查询需要在3个不同的数据库(db1,db2和db3)上运行,并查询3个数据库中完全相同的2个表: sales_order_item sales_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))
            )

我正在使用全部联盟为上述3个不同的数据库运行以上查询。

问题在于,每个表都保存40到8000万行的数据,并且上面的查询需要大约1.5个小时来执行。

我不确定是否有一种方法可以进一步优化上述查询,即使查询中使用的所有列都已建立索引。

任何帮助将不胜感激。

0 个答案:

没有答案