Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > пересчитать автоинкремент в таблице


Автор: jone31 6.7.2010, 19:15
всех приветствую.
вчера почистил таблицу mysql с логами, удалил 34 миллиона записей, оставил записи только за этот год, и получается что первый id начинается почти с 12 миллионов, что не очень удобно и это все далее будет плодится в очень быстром темпе. 

вопрос: можно ли с помощью sql языка пересчитать автоинкримент во всех строках таблицы автоматически?

столбец `id` - автоинкримент

Автор: Akina 6.7.2010, 19:24
Оставь как есть - это будет правильно.

Автор: jone31 6.7.2010, 19:36
Цитата(Akina @  6.7.2010,  19:24 Найти цитируемый пост)
Оставь как есть - это будет правильно.

а что в этом правильного? 
таблица статическая, на неё ничего не ссылается. 

Автор: Artemon 6.7.2010, 20:32
Если возникает потребность обнулять автоинкремент, то это первый звоночек, говорящий что структура БД не в порядке, либо использование БД не правильное.

Автор: skyboy 6.7.2010, 20:53
если никто не ссылается - используй естественный первичный ключ. зачем в таком случае синтетика, на которую никто не ссылается, которую никто не использует, которую надо время от времени удалять и перенумеровывать?

Автор: jone31 6.7.2010, 23:15
Цитата(skyboy @  6.7.2010,  20:53 Найти цитируемый пост)
если никто не ссылается - используй естественный первичный ключ. зачем в таком случае синтетика, на которую никто не ссылается, которую никто не использует, которую надо время от времени удалять и перенумеровывать?


под моими словами "ничего не ссылается", я имел ввиду что от поля таблицы id ничего не зависет, а на остальных полях есть связи.

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

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

Автор: Akina 7.7.2010, 07:14
Цитата(jone31 @  7.7.2010,  00:15 Найти цитируемый пост)
не совсем понял значение слова синтетика

Синтетический ключ. Подробности в мануале.

Цитата(jone31 @  7.7.2010,  00:15 Найти цитируемый пост)
 я имел ввиду что от поля таблицы id ничего не зависет

А зачем ты его вообще ввёл? Тупое следование общепринятой практике?

Автор: jone31 7.7.2010, 15:00
Цитата(Akina @  7.7.2010,  07:14 Найти цитируемый пост)
А зачем ты его вообще ввёл? Тупое следование общепринятой практике?

да я сам незнаю зачем я его ввел туда.  smile скорее всего наверно для нумерации записей...

Добавлено через 1 минуту и 42 секунды
да и модераторам легче ссылаться на строку по ID, чем по времени добавления и другим полям....

Автор: Akina 7.7.2010, 15:04
Стоп! это поле - первичный ключ, или не ключ, но индексированное, или просто тупой indentity?

Автор: jone31 7.7.2010, 16:00
Код

CREATE TABLE IF NOT EXISTS `log` (
  `id` bigint(20) NOT NULL auto_increment,
  `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  `user_id` int(11) default NULL,
  `user_sn` varchar(50) default NULL,
  `type` varchar(10) default NULL,
  `msg` text,
  `room` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8


Автор: Akina 7.7.2010, 16:44
1) Ты создаёшь поле bigint(20) - т.е. чётко понимая, что записей будет дохрена. И в то же время тебя пугает восьмизначный номер... где логика?
2) Поскольку это поле является первичным ключом, а таблица явно является низовой - изменение этого поля есть явный идеологический косяк. Artemon, видимо, прав.

Автор: jone31 7.7.2010, 20:49
да, это косяк. Но вопрос был в другом: можно ли пересчитать id в таблице по новой?

Автор: Akina 7.7.2010, 21:54
Да. Можно.

Автор: dillinja 30.1.2011, 19:15
jone31 случаем не решил вопрос ? просто впадлу копировать базу и прогонять по новой...

у меня такой же вопрос возник, дело в том что эти ID как никак память жрут - зачем использовать лишние мегабайты в пустую ?

 ! 
skyboy
остынь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)