首页 > 解决方案 > Mysql内部连接计数查询太慢

问题描述

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

标签: mysqlcountinner-join

解决方案


首先,我建议使用别名和替代语法来简化您的查询,以便您更好地阅读查询。

您肯定需要为 table2 上的 Mercer_id 创建一个索引(如果您没有)。然后你需要分析你的查询。确保您具有要查询的字段的组合索引。您应该将性能提高几个数量级。


推荐阅读