我正在尝试使用简单的内部连接语句来获取计数查询。我已经为所有属性创建了索引。查询非常慢:(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 --- Table2)。 12秒对我的处理来说是非常糟糕的时间。
答案 0 :(得分:-1)
您正在尝试使用“ join”关键字联接表,这意味着正在应用交叉联接。交叉联接通常比内部联接慢。
还有另一件事,您想使用内部联接,为什么要在哪里放置条件。它还正在应用交叉连接。
尝试此查询:
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';
希望它能起作用。
谢谢