Что является более быстрым способом проверки дубликатов записей, а затем создания новой записи? - PullRequest
0 голосов
/ 30 июля 2011

Я хочу проверить, существует ли запись, если она будет, я увеличу ее поле счетчика на 1, если нет, я создам новую запись и инициализирую ее счет на 1. Достаточно просто, верно? Однако, похоже, я наткнулся на множество способов сделать это, и я не уверен, какой путь самый быстрый.

1) Я мог бы использовать это, чтобы проверить существующую запись, затем в зависимости, либо обновить, либо создать:

if(mysql_num_rows(mysql_query("SELECT userid FROM plus_signup WHERE userid = '$userid'")))

2) Или я должен использовать WHERE_EXISTS?

SELECT DISTINCT store_type FROM stores
WHERE EXISTS (SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type);

3) Или используйте это для вставки записи, затем, если она существует, обновите ее:

INSERT INTO table (a,b,c) VALUES (1,2,3)
   ON DUPLICATE KEY UPDATE c=c+1;
UPDATE table SET c=c+1 WHERE a=1;

4) Или, возможно, я могу установить столбец идентификатора в качестве уникального ключа, а затем просто подождать, чтобы увидеть, есть ли дублирующая ошибка при вводе? Тогда я мог бы обновить эту запись вместо этого.

У меня будет около 1 миллиона записей для поиска, первичный ключ в настоящее время - bigint. Все, что я хочу сопоставить при поиске в записях, это просто поле идентификатора bigint, в настоящий момент нет двух записей с одинаковым идентификатором, и я бы хотел сохранить его таким.

Редактировать: О, стреляй, я создал это не в том разделе. Я хотел поместить это в serverfault.

Ответы [ 2 ]

2 голосов
/ 30 июля 2011

Я считаю, что это 3.

Установите ограничение INDEX или UNIQUE, а затем используйте синтаксис числа 3.

0 голосов
/ 30 июля 2011

Зависит от того, какой случай будет происходить чаще.

Если более вероятно, что запись не существует, я бы пошел на INSERT IGNORE INTO, проверяя затронутые строки впоследствии; если это 0, запись уже существует, поэтому выдается UPDATE.

В противном случае я бы пошел на INSERT INTO ... ON DUPLICATE KEY UPDATE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...