У меня есть промежуточная таблица вроде этого:Наиболее эффективный способ сравнить большой «текст» введите значения в MySQL с помощью InnoDB двигатель
CREATE TABLE `staging` (
`created_here_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`desc_text` TEXT NOT NULL);
и таблица назначения, как:
CREATE TABLE `final_tbl` (
`row_id` BIGINT NOT NULL AUTO_INCREMENT,
`created_here_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`desc_text` TEXT NOT NULL);
Я хочу, чтобы вставить desc_text в final_tbl, только если его нет. Я имею в виду два варианта:
- чек, если staging.desc_text существует в final_tbl.desc_text, если нет, то вставить в final_tbl
- Поддерживать колонку в «final_tbl», который будет хранить значение SHA224 колонки desc_text. сравните значение SHA224 staging.desc_text с столбцом SHA224 в финальной таблице, а затем решите, следует ли вставлять или игнорировать.
Я хочу знать, какой вариант будет быстрее?
Спасибо, Гордон, вместо вашего предложения, если я использую «insert ignore into final_tbl (desc_text, sha224), выберите desc_text, sha224 из этапа». При вставке записей в final_tbl не будет ли mysql сначала проверять уникальный столбец ключей и решать сразу после, вместо сравнения столбца «desc_text»? – abb
@abb. , , Я думал о чем-то подобном, но если у вас есть два * разных значения '' desc_text' с тем же значением sha224, то второй не будет вставлен. Такое хеширование сталкивается довольно редко, но не невозможно. –
Даже для относительно короткого MD5, только один шанс в 9 триллионов, что будет ложный хит, подобный этому с 9 триллионами документов. –