При выполнении INSERT INTO {tableA} SELECT a,b,c FROM {tableB} ON DUPLICATE KEY UPDATE x=y
Каков приоритет при оценке дубликатов ключей? Я предполагаю, что MySQL сначала проверяет, существует ли кортеж из tableB, столкновения с уникальным / первичным ключом в tableA. Если SELECT не включает первичный ключ или другой дублирующий ключ не существует, то оценивается каждая последующая «группа» УНИКАЛЬНОГО ИНДЕКСА и выполняется такая же проверка. Но что произойдет, если ваша таблица B имеет несколько наборов уникальных многоколоночных индексов? Оцениваются ли они сверху вниз, как описано SHOW INDEXES FROM tableB
?
Вот мой SHOW INDEXES FROM <table>
:
Table,Non_unique,Key_name,Seq_in_index,Column_name,Collation
daily_metrics,0,PRIMARY,1,id,A
daily_metrics,0,unique_lineItem_creative_y_m_d,1,line_item_id,A
daily_metrics,0,unique_lineItem_creative_y_m_d,2,creative_id,A
daily_metrics,0,unique_lineItem_creative_y_m_d,3,year,A
daily_metrics,0,unique_lineItem_creative_y_m_d,4,month,A
...
Представьте, что есть дополнительные наборы уникальных индексов, похожих на unique_lineItem_creative_y_m_d
Документы, похоже, не иллюстрируют это поведение.
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
Я также предполагаю, что используется первый совпадающий уникальный индекс, если совпадение существует, без какой-либо попытки сопоставить последующие уникальные индексы, которые могут совпадать. Другими словами, используется первый уникальный индекс, который соответствует, без учета попытки найти наилучшее возможное соответствие по всем индексам.