簡體   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