понедельник, марта 31, 2008

MySQL: оптимизация запроса на обновление счетчика

При сохранении различной статистики, довольно часто встречается задача обновить существующую запись а если она не существует - создать.

Например, существует таблица "test" с полями "day" (дата, без времени) и "counter" (число - счетчик). Есть уникальный индекс по полю "day". Надо его увеличивать при наступлении какого-то внешнего события (у меня это downloads).

Довольно часто я применял такой метод - делаем SELECT (ищем запись в базе), если ее нет - INSERT, иначе - UPDATE. В последнее время стал использовать функцию PHP mysql_affected_rows(), а вчера увидел еще одно решение - всегда делается вставка, и если произошла ошибка дублирования ключа - выполняем UPDATE.

Читать далее...

2 комментария:

Igor Karablin комментирует...

Кстати Вов, я 2й вариант начал использовать еще когда мы в автомире сидели :)
А 3й вариант далеко не на всех версиях mysql существует, так что будь бдителен.

Unknown комментирует...

Игорек ты что-то с номерами попутал.. ибо 3-й вариант существует в любой базе данных :) А какой тогда ты стал в Автомире еще использовать? Точно 2-й :) ?