mysql内部连接计数查询太慢

2uluyalo  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(273)

我尝试用一个简单的内部连接语句来获取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秒对于我的进程来说是非常糟糕的时间。

w1jd8yoj

w1jd8yoj1#

您正试图用“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';

希望有用。
谢谢

nue99wik

nue99wik2#

首先,我建议使用别名和其他语法简化查询,以便更好地阅读查询。
您肯定需要为表2上的商家id创建一个索引(如果您没有)。然后你需要分析你的问题。确保为要查询的字段提供了一个组合索引。你应该得到数量级的性能提升。

相关问题