我有一个如下所示的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个小时来执行。
我不确定是否有一种方法可以进一步优化上述查询,即使查询中使用的所有列都已建立索引。
任何帮助将不胜感激。