我想從一系列MySQL表中選擇重複的行。在相同的架構和行的同樣數量的不同表上運行時,下面的查詢...對類似表格的查詢性能大不相同?
SELECT *
FROM table_name
WHERE column_name
IN (SELECT *
FROM (SELECT column_name
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 1
) AS subquery)
);
...正在產生完全不同的效果。在一張表中,它會在幾秒鐘內執行,在另一張表中執行相同的數據類型和類似的行數,它會掛起很長一段時間(目前爲30分鐘並計數)。對於這種差異有什麼可能的解釋?
編輯 - 使用EXPLAIN顯示所有查詢返回「不可能在讀取const表後WHERE注意到」的依賴子查詢。這可能是一個很好的時機,提到任何表格上都沒有索引(我繼承了...)。在應該是uniqid
的列中找到重複的值,以便我可以將其轉換爲正確的主鍵是整個snape追捕的重點。
不同的數據庫引擎(MyISAM數據VS InnoDB的或其他)不同的指標是首先想到的事情。 'EXPLAIN SELECT * ....'每個輸出是什麼? – Jakar
你的表是不同的。 MySQL在相關的子查詢中感到不安,並且正在進行坐下罷工。誰知道 – Drew
我不知道它是否會有所作爲,但你可以嘗試'SELECT * FROM table_name AS查詢JOIN(子查詢...)AS子查詢ON子查詢。列名LIKE query.column_name;' – Jakar