[英]Mysql inner join count query too slow
我正在尝试使用简单的内部连接语句来获取计数查询。 我已经为所有属性创建了索引。 查询很慢:(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 上的 Merchant_id 创建一个索引(如果您没有)。 然后您需要分析您的查询。 确保您对要查询的字段具有组合索引。 您应该获得数量级的性能提升。
您正在尝试使用“join”关键字连接表,这意味着正在应用交叉连接。 交叉联接通常比内部联接慢。
另一件事是,您想使用内部连接,为什么要将条件放在 where。 它也在应用交叉连接。
试试这个查询:
select count(*)
from (`mymodb`.`Table1`
inner join `mymodb`.`Table2` on ((`mymodb`.`Table2`.`id` =`mymodb`.`Table1`.`id_table1`)))
ON (`mymodb`.`Table2`.`merchant_id` = 16685)
and Table1.created_at >= '2017-12-03 16:00:19' AND Table1.created_at <='2018-05-03 16:00:19';
希望它有效。
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.