mysql - mysql - 使用 union all 查询 3 个数据库 - 优化
问题描述
我有一个 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))
)
如前所述,我正在使用union all为 3 个不同的数据库运行上述查询。
问题是这些表,每个表都包含 40 到 8000 万行的数据,上述查询大约需要 1.5 小时才能执行。
我不确定是否有办法进一步优化上述查询,即使查询中使用的列都已编入索引。
任何帮助将不胜感激。
解决方案
推荐阅读
- r - 网络爬虫从私人网站中提取数据?
- javascript - 如何在不使用表单的情况下获取选择输入的当前值?
- python - 如何在 2D 列表中连接 1D 列表中的字符串以创建具有所有连接值的 1D 列表?
- python - 如何绘制嵌套/多层 json 字典
- sql - SQL sum 按列分组,包括与从属相同的表的行
- scikit-learn - gridsearch.predict_proba 结果是列表而不是数组
- python - 如何防止 Heroku 时钟测功机睡在免费套餐上?
- javascript - 如果拖动可拖动元素,引导模式不会在第一次单击背景时关闭
- python - Folium 中的时间滑块 Choropleth 无法正确着色
- firebase - 具有空值安全性的 Dart/Flutter 问题