Матричное матричное умножение Eigen3 в 30 раз быстрее, чем собственный распараллеленный код openmp.

У меня была ситуация, когда мне нужно было обновить или вставить в таблицу в соответствии с двумя полями (оба внешних ключа), на которых я не мог установить ограничение UNIQUE (поэтому INSERT ... ON DUPLICATE KEY UPDATE не будет работать ). Вот что я в конечном итоге использовал:

replace into last_recogs (id, hasher_id, hash_id, last_recog) 
  select l.* from 
    (select id, hasher_id, hash_id, [new_value] from last_recogs 
     where hasher_id in (select id from hashers where name=[hasher_name])
     and hash_id in (select id from hashes where name=[hash_name]) 
     union 
     select 0, m.id, h.id, [new_value] 
     from hashers m cross join hashes h 
     where m.name=[hasher_name] 
     and h.name=[hash_name]) l 
  limit 1;

Этот пример взят из одной из моих баз данных, а входные параметры (два имени и число) заменены на [hasher_name], [hash_name] и [ new_value]. Вложенный SELECT ... LIMIT 1 вытаскивает первую из текущей записи или новой записи (last_recogs.id - это первичный ключ автоинкремента) и использует это как значение, введенное в REPLACE INTO.

0
задан chtz 18 January 2019 в 16:47
поделиться