MySQL内部联接计数查询太慢

时间:2018-09-14 08:28:07

标签: mysql count inner-join

我正在尝试使用简单的内部连接语句来获取计数查询。我已经为所有属性创建了索引。查询非常慢:(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秒对我的处理来说是非常糟糕的时间。

1 个答案:

答案 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';

希望它能起作用。

谢谢