2011-11-05 38 views
7

從MySQL的最新源代碼(不確定如果是C或C++),它是如何實現自動增量的?我的意思是,它是否有效,因爲它像元數據資源一樣存儲在最後一次停用的表上,還是需要執行表掃描才能找到表中最大的ID?另外,當你看看PostgreSQL如何實現時,你是否看到使用自動增量的負面影響?MySQL,C++ - 以編程方式,MySQL自動增量如何工作?

+0

您正在使用哪種引擎? (例如InnoDB) –

回答

2

這將取決於數據庫使用的是哪個引擎。 InnoDB正在存儲內存中的最大值,而不是磁盤上。非常有效。我想大多數引擎會做類似的事情,但不能保證。

InnoDB's Auto Increment是怎麼回事時,DB被加載運行一次下面的查詢和變量存儲在內存中:

SELECT MAX(ai_col) FROM t FOR UPDATE; 

取決於你將如何實現字段相較於PostgreSQL的完全缺乏一個auto_increment的你自己。 (至少它上次缺少它,它們可能已經改變)大多數會創建一個SEQUENCE。這似乎存儲在內存僞表中。我會把InnoDBs變成更簡單更好的方法。如果不相等,我猜想InnoDB會更有效率。

+0

好吧,所以我想我已經閱讀了InnoDB,當數據庫加載時,它會尋找最後一個序列,然後將其緩存在虛擬內存中作爲表的元數據的一部分。謝謝。 – Volomike