2013-04-03 33 views
2

我有30甚至更多的表,並且所有表的主鍵都設置爲自動增加,所以無論何時執行刪除操作,如從10個表中刪除30條記錄,然後刪除300個存儲單元將始終因爲主鍵被設置爲自動增量。所以想想非常大型數據庫的這種情況,那麼如何解決這個問題並再次使用這些存儲器單元。刪除後數據庫內存浪費

+2

AFAIK自動增量只是一個計數器。它與記憶無關。 PK欄不是完整的數學系列這一事實根本不影響性能。刪除的唯一影響是回滾日誌。如果您要刪除表中的所有數據,最好將其截斷。 –

+0

我不是刪除所有的數據,如果pk只是一個計數器而不是內存管理如何發生? – rupinder18

+0

mysql內存模型是一件複雜的事情。關於PK的行集合是sparce,即缺少的值不會佔用任何內存。在這裏閱讀關於mysql內存管理的更多信息:http://dev.mysql.com/doc/refman/5.0/en/memory-use.html –

回答

1

那麼它的自動增加,所以你不能幫助它,沒有內存浪費。

1

主鍵沒有提及任何種類的「存儲單元」,它只是一個給每一行賦予一個唯一編號的計數器。

理論上可以使用所有可能的鍵,但是我不確定MySQL是否會嘗試使用已刪除的舊值(它不應該)。但考慮到一個未簽名的BIGINT字段可能會達到18,446,744,073,709,551,615(18十億分之一),所以不太可能會遇到問題。

+0

okk接受,如果我們採取bigint我永遠不會用完空間,但如果我想再次使用相同的pk,我該怎麼辦? – rupinder18

+2

@ rupinder18理想情況下,你不應該再次使用相同的主鍵。主鍵通常在其他表中引用。如果你再次使用它,你會冒險把它與它不應該的數據聯繫起來。自動遞增主鍵不應該是您關心的值。如果你想改變它/手動分配它,我不會推薦自動增量。 – Dracs

0

自動增量只是一個計數器。它與記憶無關。 PK欄不是完整的數學系列這一事實根本不影響性能。刪除的唯一影響是回滾日誌。如果您要刪除表中的所有數據,最好將其截斷。

mysql內存模型很複雜。有關概述,您可以從mysql開發文檔中查看this article