我一直在負責支持的客戶端慢得令人痛苦的應用程序。我啓用了MySQL slow_query_log並發現了一些似乎是罪魁禍首的查詢。我對這個查詢做了些什麼感到有點困惑,但任何關於如何重寫這個的建議都會有所幫助。很慢執行MySQL查詢
SELECT
table_a.id AS table_a_id_1,
table_a2.id AS table_a_id_2
FROM
table_a,
table_b
LEFT JOIN
table_a AS table_a2
ON
table_a.value = table_a2.value
WHERE
table_a.value_id = 112 AND
table_a2.value_id = 113 AND
table_a.status != table_a2.status AND
table_a.id = table_b.id;
對我來說,它看起來像查詢從單個表中選擇相同的數據兩次,然後做與選定的一些數據比較,以及執行與表-B聯接爲好。這裏是MySQL引用這個查詢執行的日誌。
Query_time: 160.854398
Lock_time: 0.000139
Rows_sent: 12
Rows_examined: 10339025
任何建議你可以提供將是有益的!
我甚至不認爲這個查詢是有效的......你確定它運行正確嗎?在發佈之前是否對查詢進行了任何更改? –
我也不認爲它是有效的,它對我來說看起來很奇怪。但是,它運行時不會產生錯誤並返回行。我對查詢做的唯一更改是用table_a和table_b ...替換表名。 我會檢查,看看是否我可以張貼實際的完整的查詢,如果你認爲這將有助於。這真的更令人困惑......哈哈! –
這是一個不好的極端思想結合顯式和隱式連接(使用隱式連接在所有的是SQL反模式)。只需修復以使用明確的連接即可獲得幫助,那麼您需要修復查詢中出現錯誤的部分。在@ GordonLinoff的回答中看到我的評論。 – HLGEM