繁体   English   中英

Mysql 内连接计数查询太慢

[英]Mysql inner join count query too slow

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

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

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

您正在尝试使用“join”关键字连接表,这意味着正在应用交叉连接。 交叉联接通常比内部联接慢。

另一件事是,您想使用内部连接,为什么要将条件放在 where。 它也在应用交叉连接。

试试这个查询:

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

希望它有效。

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM