mysql - Mysql内部连接计数查询太慢
问题描述
我正在尝试使用简单的内部连接语句来获取计数查询。我为所有属性创建了索引。查询很慢:(12 秒)。我在表 1 和表 2 中有 400 万条记录。这是我的查询:
select count(*)
from (`mymodb`.`Table1`
join `mymodb`.`Table2` on ((`mymodb`.`Table2`.`id` =`mymodb`.`Table1`.`id_table1`)))
where (`mymodb`.`Table2`.`merchant_id` = 16444)
and Table1.created_at >= '2017-12-03 16:00:19' AND Table1.created_at <='2018-05-03 16:00:19';
这是 desc 查询命令(参见 5.524.164 记录):
1 SIMPLE Table1 ALL Table12_index,Table16_index 5524164 21.38 Using where
1 SIMPLE Table2 eq_ref PRIMARY,idx_Table2_id-uniq,Table26_index PRIMARY 8 mymodb.Table1.id_table1 1 50 Using where
表2
这将是使用两个表(表 1 --- 表 2)的内部连接来获取计数查询的最佳方法。12 秒对我的过程来说是非常糟糕的时间。
解决方案
首先,我建议使用别名和替代语法来简化您的查询,以便您更好地阅读查询。
您肯定需要为 table2 上的 Mercer_id 创建一个索引(如果您没有)。然后你需要分析你的查询。确保您具有要查询的字段的组合索引。您应该将性能提高几个数量级。