Обновление данных в таблице

Kefir

Новичок
Обновление данных в таблице

[исходные данные]

1) Имеется таблица, в которой содержатся записи о папках (расшаренных) на некотором компе. Поля таблицы:
id INT(64),
name TEXT,
checked DATE
где в поле checked содержится время последней проверки папки (расшарена/зашарена), остальные поля не важны.
Сейчас в таблице примерно 2млн записей (большая у нас сеть).
2) Имеется файл, сгенерированный индексатором, в котором содержатся об этих самых папках, который можно загрузить в таблицу через LOAD DATA. Но вся фишка в том, что данные об этой папке уже могут содержаться в таблице.

[задача]

Если такой папки в таблице еще нет, то ее добавить, а если есть - обновить поле checked.
Как это сделать за кратчайшее время?
 

Kefir

Новичок
Если я правильно понимаю работу команды REPLACE, то она заменяет записи с одинаковым индексом. У меня же индекс это поле id, а в файлике вместо него прописано \N, так что такой вариант не подходит
 

Kefir

Новичок
OK, создал индекс по полю name. А как теперь быть с загрузкой из файла? Сначала во временную таблицу, а потом поштучно REPLACE?
 

DeFacto

Новичок
Kefir
Оператор REPLACE работает точно так же, как INSERT, за исключением того, что если старая запись в данной таблице имеет то же значение индекса UNIQUE или PRIMARY KEY, что и новая, то старая запись перед занесением новой будет удалена
http://dev.mysql.com/doc/mysql/ru/replace.html
 

Kefir

Новичок
DeFacto, спасибо, документацию я читать умею. Мне вот тока одно не понятно: если у меня id это PRIMARY KEY, а name - UNIQUE, то с кем из них будет сравнивать REPLACE? Я пока что написал
LOAD DATA LOCAL INFILE 'имя_файлика' REPLACE INTO TABLE 'имя_таблицы'
В файле, как я уже писал, вместо id стоит \N. Будет все это дело работать?
 

Cougar

Кошак
Kefir Сравнивать будет и с id, и с name.

Насчет работать - а попробуй :)

Да, и, наверное, если уж ты регулярно в поле id пишешь NULL, то имеет смысл вообще это поле дропнуть - как избыточное. Уникальность записи можно будет определить и по name.
 

Kefir

Новичок
Только что попробовал. Во-первых, добавляет ОЧЕНЬ медленно, во-вторых ищет тоже очень медленно. Может, имеет смысл создать вторую такую же таблицу, только без индекса по main, а потом в нее из первой копировать все содержимое для ускорения поиска? Поле id мне пока нужно для других целей, так что убивать его рано. А вообще сейчас в таблице примерно 3 млн записей.
 
Сверху