MySQL, C ++ - программно, как работает автоинкремент MySQL? - PullRequest
7 голосов
/ 06 ноября 2011

Из самого последнего исходного кода (не уверен, что это C или C ++) MySQL, как это делает автоинкремент? Я имею в виду, является ли он эффективным в том смысле, что он хранит, как ресурс метаданных, в таблице, в которой он был остановлен в последний раз, или ему нужно выполнить сканирование таблицы, чтобы найти самый большой идентификатор в таблице? Кроме того, видите ли вы какие-либо негативные аспекты использования автоинкремента, когда смотрите, как он реализован по сравнению, скажем, с PostgreSQL?

1 Ответ

2 голосов
/ 06 ноября 2011

Это будет зависеть от того, какой движок использует база данных. InnoDB хранит наибольшее значение в памяти, а не на диске.Очень эффективный.Я предполагаю, что большинство двигателей будет делать что-то подобное, но не может этого гарантировать.

Автоинкремент InnoDB Будет запущен следующий запрос при загрузке БД и сохранится переменная в памяти:

 SELECT MAX(ai_col) FROM t FOR UPDATE;

Сравнение с PostgreSQLПолное отсутствие auto_increment у зависит от того, как вы будете реализовывать поле самостоятельно.(По крайней мере, этого не было в прошлый раз, когда я его использовал. Возможно, они изменились) Большинство из них создаст SEQUENCE .Который, кажется, хранится в псевдотаблице в памяти.Я бы взял InnoDB проще.Я предполагаю, что InnoDB будет более эффективным, если они не равны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...