2015-02-12 1 views
0

Я использую интеграцию данных Pentaho для извлечения больших данных JSON в базу данных MySQL.Что такое быстрый запрос на удаление повторяющихся первичных ключей вместо их обновления (сохранение последней записи)?

В любом случае, конечно, есть возможность чистой вставки таблицы, но также вставка/обновление таблицы (она будет искать ключ для обновления, а если не найден, вставьте строку).

Эти данные являются в основном текущим представлением/состоянием билетов, поэтому мне нужны все столбцы данных для данной строки, обновленные на основе уникального идентификатора билета.

С Pentaho и, вероятно, большинством приложений, обновление происходит намного медленнее, чем вставка. Тем более, что, по крайней мере, с этим приложением вы можете одновременно иметь до 25 соединений, записывающих (вставляя) данные, но только (1) обрабатывать процесс поиска, а затем записывать.

Поэтому я предпочел бы сделать следующее: вставить все данные (один раз в день или около того) .., а затем сразу же запустить запрос, который удаляет все повторяющиеся идентификаторы билетов - EXCEPT для одного с наибольшим (aka latest) «время обновления».

Мне кажется, что это будет намного быстрее - и мне интересно, как это сделать в MySQL. Я думаю, что это что-то вроде

Удалить из [table-name], где ticket_id = ticket_id и update_time < update_time, но я не уверен, что это правильно или переменные необходимы для сравнения данных в межстрочном порядке.

+0

В MySQL вы не можете иметь повторяющиеся первичные ключи в любом случае. Поэтому, если вставка имеет существующий первичный ключ, MySQL автоматически отклонит. –

+0

Ах, я, возможно, неправильно понял. Я просто использую идентификатор билета как уникальный идентификатор. Я не думаю, что на самом деле я настроил его как первичный ключ. – user45867

+0

Уникальный идентификатор не позволяет дублировать. Что вы на самом деле имеете? (Вставьте инструкцию CREATE TABLE в свой вопрос.) –

ответ

0

Я чувствую, что я нашел этот метод на другой странице:

DELETE FROM ztable zt 
WHERE EXISTS (
SELECT * 
FROM ztable ex 
WHERE ex.CaseKey = zt.CaseKey 
AND ex.recordDate > zt.recordDate 
); 
Смежные вопросы