Я занимаюсь разработкой многопользовательской игры HTML5, где я нахожусь: п отношения между таблицами «ключевое слово» и «модель», как показано на следующем изображении показывает:Эффективное вставка/обновление тузд м: п отношения
keyword.id
и model.id
are auto_increment unsigned int и keyword.keyword
- уникальный индекс.
Ради эффективности я ищу способ управления отношениями. Тривиальным способом было бы:
- Проверьте ключевое слово уже существует
- Если да: обновление
timesCount
иroundCount
отmodel_has_keyword
- Если нет:
insert into keyword
иinsert into model_has_keyword
Но с ростом числа пользователи, играющие одновременно, боюсь, что тривиальный путь станет слишком медленным. Итак, каков наиболее эффективный способ сделать это?
Во время поиска в StackOverflow я напутал две идеи, но я думаю, что они оба не соответствуют моим потребностям.
INSERT INTO table ON DUPLICATE KEY UPDATE col=val
ЕслиINSERT INTO
будет обработан, я должен был бы вызвать другоеINSERT INTO
оператор для вставки в обеих таблицахkeyword
иmodel_has_keyword
REPLACE
заявление: если я заменю запись в таблице ключевых слов,id
присваивается следующее значение автоинкремента, так что ссылка на таблицуmodel_has_keyword
будет потеряна.
Поскольку я не эксперт, пожалуйста, исправьте меня, если я что-то не понял.
Спасибо за ответ! Не могли бы вы упомянуть, как реализовать его так, как вы описали в B? Я не знаю, как это должно работать. Предположим, что выражение выглядит так: INSERT INTO keyword (keyword) VALUES ('myValue') ON DUPLICATE KEY UPDATE model_has_keyword.roundCount = model_has_keyword.roundCount + 1, model_has_keyword.timesCount = model_has_keyword.timesCount + myIntValue Если дублирующий ключ не обнаружен, я не вижу вставки в файл model_has_keyword! Если есть дубликат ключа, он будет работать так, как ожидалось. Последнее, но не менее важное: вы имели в виду использование хранимой процедуры или запрос из источника (php/js)? – grange
Но вам не нужны ключевые слова в таблице! – Amarnasan
Спасибо, Ихад! Вы абсолютно правы, но я не упомянул, что мне нужна таблица ключевых слов для другого отношения m: n. Таким образом, это приведет к избыточному хранению ключевых слов. – grange