в replacingMT есть 3 типа колонок: 1. те, что в ORDER BY — ключи дедупликации 2. опциональный version (не мб в ORDER BY) — отвечает за выбор строки (если нет, то остается последняя по вставке строка) 3. остальные — значения дедуплицируются что вы хотите получить?
Дедупликацию дубликатов по всем колонкам таблицы (п1)
можно последним значением в ORDER BY добавить cityHash(*);
простой ответ: запихивайте все столбцы в order by чуть более правильный ответ: не надо запихивать все столбцы в order by кейс заключается в том, что вы пишете полные дубликаты и хотите от них избавляться?
"чуть более правильный ответ" критикуешь - предлагай)
так я написал про 2 ответа и уточнил у вас кэйс вы ответили, но рядом Дмитрий Титов предложил отличный вариант с cityHash
Я подумал, что у вас был свой вариант, но вы его не написали 🙌
на самом деле не было кроме вариантов использовать optimize table ... deduplicate (тоже не ахти вариант) или выяснения подмножества столбцов, которых было бы достаточно для дудупликации но есть привычка уточнять кэйс перед тем, как советовать что-то специфичное
чем плохо перечисление всех колонок?
В первом приближении потому что дедубликация идёт по ключу сортировки, и если явно не указать разные ключ сортировки и pk, то все столбцы полетят в оперативку (немного натянуто). Во втором приближении даже в фоне дорого сравнивать полные строки, сколько у вас столбцов? 5, 10, 100500? А решение с cityHash аккуратно закрывает обе проблемы
Обсуждают сегодня