Я бы немного изменил структуру, добавив одно дополнительное поле и уникальный индекс на поле
name...
Короче...
Таблица:
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`count` int(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
При вставке записей использовал бы такой запрос:
INSERT INTO `test` (`name`) VALUES ('строка')
ON DUPLICATE KEY
UPDATE `count` = `count` + 1;
Что в итоге?
- В итоге не будет лишних объёмов данных в БД...
- Всего один запрос на вставку;
- В поле
count будет число - сколько раз была занесена данная строка в БД...
UPDATE:
Исходя из комментариев и подробностей автора дополняю ответ...
Можно например использовать Redis (increment)...
Где ключ будет "строка" (в данном случае kot например).
Перед записью ныряем в Redis, подкручиваем "счётчик" и далее берем это значение и записываем в MySQL в поле slug:
kot-ЗНАЧНИЕ_СЧЁТЧИКА
В итоге один запрос в Redis и один INSERT в MySQL...
Понятна мысля?)
P.S.: Redis можно и на MySQL тож заменить...используя мой первый вариант в ответе в качестве счётчика вместо Redis'а...но тут на пару запросов больше выйдет...что и не критично в данном случае думаю...