我尝试用一个简单的内部连接语句来获取count查询。我已经为所有属性创建了索引。查询非常慢:(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 query命令(参见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)获取count查询的最佳方法是什么。12秒对于我的进程来说是非常糟糕的时间。
2条答案
按热度按时间w1jd8yoj1#
您正试图用“join”关键字连接表,这意味着正在应用交叉连接。交叉连接通常比内部连接慢。
另一件事,当你想使用内部连接,为什么你把条件放在哪里。它还应用交叉连接。
尝试此查询:
希望有用。
谢谢
nue99wik2#
首先,我建议使用别名和其他语法简化查询,以便更好地阅读查询。
您肯定需要为表2上的商家id创建一个索引(如果您没有)。然后你需要分析你的问题。确保为要查询的字段提供了一个组合索引。你应该得到数量级的性能提升。