SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.05.2011 12:31:19

simple
Активист
Зарегистрирован: 25.11.2010
Сообщений: 168

Узнать следующий AUTO_INCREMENT

Добрый день, что бы узнать значение счетчика AUTO_INCREMENT углубившись в дебри INFORMATION_SHEMA родил вот такой запрос:


SELECT auto_increment FROM information_schema.tables WHERE table_name='name_table';
 

Запрос позволяет узнать следующее число AUTO_INCREMENT, и у меня есть еще более простой вариант узнать это по PRIMARY индексу:

SELECT MAX(id)+1 FROM name_table;

Собственно вопрос в том какой из этих запросов более производителен для сервера? И как себя ведет база INFORMATION_SHEMA если к ней обращаются в транзакции, блокирует она свои таблицы или строки?.Спасибо.

Отредактированно simple (06.05.2011 12:33:23)

Неактивен

 

#2 10.05.2011 11:33:37

simple
Активист
Зарегистрирован: 25.11.2010
Сообщений: 168

Re: Узнать следующий AUTO_INCREMENT

ни кто не в курсе?

Неактивен

 

#3 10.05.2011 21:11:05

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Узнать следующий AUTO_INCREMENT

По производительности не должно быть разницы в большинстве случае, так как

SELECT MAX(ID)
выполняется предельно быстро - см. EXPLAIN, обычно он содержит "Select tables optimized away".

Нужно учитывать, что два запроса дают не одно и то же - если в конце таблицы удалялись строки, то auto_increment не сбросится, что более корректно, так как исключает существование в разное время разных записей с одним и тем же id. Поэтому вариант с INFORMATION_SCHEMA предпочтительнее.

В INFORMATION_SCHEMA невозможна запись, а ее таблицы формально MEMORY или MyISAM, поэтому транзакционности от нее не ожидал бы. Блокирует или нет вы можете проверить простым экспериментом.

Неактивен

 

#4 10.05.2011 22:31:10

simple
Активист
Зарегистрирован: 25.11.2010
Сообщений: 168

Re: Узнать следующий AUTO_INCREMENT

Спасибо

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson