MySQLの最新のソースコード(CまたはC++の場合は不明)から、どのように自動インクリメントが行われますか?つまり、最後に取り残されたテーブルにメタデータリソースのようなデータが格納されているか、テーブル内で最大のIDを見つけるためにテーブルスキャンを実行する必要があるという点で効率的ですか?また、それが実装されている方法、例えばPostgreSQLを見たときにautoincrementを使うことの否定的な側面も見えますか?MySQL、C++ - プログラムによって、MySQL自動インクリメントはどのように機能しますか?
7
A
答えて
2
これは、データベースが使用しているエンジンによって異なります。 InnoDBは、ディスク上ではなくメモリに最大値を格納しています。非常に効率的です。私はほとんどのエンジンが同様のことをすると思いますが、それを保証することはできません。
InnoDB's Auto IncrementはDBがロードされたときに一度、以下のクエリを実行し、メモリ内の変数を格納するつもりです:
SELECT MAX(ai_col) FROM t FOR UPDATE;
PostgreSQL年代にAUTO_INCREMENTの完全な欠如は、あなたがフィールドを実装する方法をに依存していることを比較すると、あなた自身。 (私が使ったのは最後に欠けていましたが、変更されたかもしれません)ほとんどがSEQUENCEを作成します。これは、メモリ内の疑似テーブルに格納されているように見えます。私はInnoDBをもっと簡単な方法にするつもりです。私はInnoDBが同等でない場合、InnoDBがより効率的になると思います。
+0
さて、InnoDBでは、データベースが読み込まれたときに、最後のシーケンスを探して、これを仮想メモリにテーブルのメタデータの一部としてキャッシュします。ありがとう。 – Volomike
あなたはどちらのエンジンを使用していますか? (InnoDBなど) –