簡體   English   中英

使用索引表的內部連接查詢運行速度很慢?

[英]Inner join query running very slow with indexed table?

我在 MySQL 服務器上運行一個兩表內連接查詢,它非常慢,需要 3 個小時才能完成。

UPDATE table_A ta
  JOIN table_B tb 
    ON ta.field1= tb.field1 
   AND ta.field2 = tb.field2
   SET ta.field2 = tb.field2, 
    ta.field3 = tb.field3
WHERE tb.field5 = 'ABC'

table_A 有 650,000 行 table_B 有 100,000 行

兩個ta。 field1 , ta. field2 , tb. field1 , tb. field2 , tb field5都被索引並顯示在 EXPLAIN 結果中。

知道如何讓它運行得更快嗎?

對於此查詢:

UPDATE `table_A` ta INNER JOIN
       table_B tb
       ON ta.`field1`= tb.`field1` AND ta.`field2` = tb.`field2`
SET ta.`field2` = tb.`field2`, 
    ta.`field3` = tb.`field3`
WHERE tb.`field5` = 'ABC';

假設新值與舊值相同(基於join條件),則無需更新field2

這些索引方法之一應該最有效:

  • table_B(field1, field2, field5)
  • table_B(field5, field1, field2) , table_A(field1, field2)

哪種效果更好取決於數據的性質。 但是,使用復合索引而不是每個字段上的單獨索引非常重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM