[英]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.