在僅包含物化查詢中的主鍵的臨時表上創建索引是否有什麼好處?在MySQL中只有一列索引表的性能
我想從特定表中刪除一些數據,以及其他具有外鍵引用的相關表。爲了提高性能,我將初始選擇物化成臨時表,然後加入它以便進行後續刪除。
臨時表只包含一列 - 子查詢中的主鍵。在臨時表的ID列上創建索引是否有任何性能優勢?在我的測試中,我看到了大約2%的改進(更多的是被索引創建的開銷所抵消),但是可能我可以測試的數據集還不夠大。
CREATE TEMPORARY TABLE ids AS (SELECT id FROM tableA WHERE xxx);
DELETE tableB FROM tableB INNER JOIN ids ON tableB.a_id = ids.id;
DELETE tableC FROM tableC INNER JOIN ids ON tableC.a_id = ids.id;
...
DELETE tableA FROM tableA INNER JOIN ids ON tableA.id = ids.id;
由於來自IDS臨時表中的所有行將用於TableB中(A_ID被索引),以刪除行,是否有任何性能好處,以創建上的ID的臨時表中的主鍵/索引?有沒有更好的,完全不同的方法來解決這個問題?
如果該列被聲明爲主鍵,那麼它已經有一個索引。 –
沒錯。澄清 - 問題是添加該主鍵是否實際上會提高後續連接的性能。我會更新這個更清晰的。 – slikchucky